tschanne: Variable als HTML-Code ausgeben

Tag zusammen

while(z < max)
{
if(BI1[z][1] == BI)
{
document.write("<option value='" + BI1[z][0] + "'>" + BI1[z][2] + "</option>");
}
z++;
}

Dieses Script befindet sich innerhalb eines SELECT-Tags im HTML. Mit Document.write kann ich dies doch ins HTML schreiben (siehe Code). allerdings erscheinen die dann nicht in der Select-Box, sondern löschen die seite und schreibt es in eine weisse html seite!!??

  1. Hallo,

    wie sieht denn der Code drum rum aus?

    sondern löschen die seite und schreibt es in eine weisse html seite!!??

    Klingt für mich als stände da irgendwo noch ein unmotiviertes document.open

    Grüße,
    Utz

    --
    Mitglied im Ring Deutscher Mäkler
    1. Hallo,

      wie sieht denn der Code drum rum aus?

      sondern löschen die seite und schreibt es in eine weisse html seite!!??

      Klingt für mich als stände da irgendwo noch ein unmotiviertes document.open

      Grüße,
      Utz

      hi
      nein nirgends is document.open
      hier der restliche code:
          <td>

      <select size="1" name="Auspragung" class="popup1" ID=Select4>

      <option value="" selected></option>

      <script type="text/javascript">
        function anz(BI)
         {
         <%rsBI1.MoveFirst%>
         //Variablen-Definition
         //**************************************************
         var max = <%=rsBI1.RecordCount%>;
         var z = 0;
         var tat = 0;

      //Definition Gesamt-Array
         var BI1 = new Array(max);
         for(var i = 0; i < BI1.length; ++i)
         {
          BI1[i] = new Array(3);
         }
         //**************************************************

      //Abfüllen Gesamt-Array
         //**************************************************

      while(z < max)
         {
         <%
         while not rsBI1.EOF
         %>

      BI1[z][0] = "<%=rsBI1("MID")%>";
         BI1[z][1] = "<%=rsBI1("Beschaffungsinstrument")%>";
         BI1[z][2] = "<%=rsBI1("Bezeichnung")%>";

      if(<%=rsBI1("Beschaffungsinstrument")%> == BI)
         {
         tat++;
         }
         z++;
         <%
         rsBI1.MoveNext
         wend
         %>
         }
        //**************************************************
        //Anzeige
        z = 0;
        document.writeln("<selcet>");
        while(z < max)
        {
         if(BI1[z][1] == BI)
         {
         document.writeln("<option value='" + BI1[z][0] + "'>" + BI1[z][2] + "</option>");
         }
        z++;
        }
        document.writeln("</selcet>");
        }
        </script>
       </select>
       </td>

      Vom Prinzp her is das schon möglich, das man so mit document.write bei ner select box options anfügen kann oder?

      1. Hallo,

        Vom Prinzp her is das schon möglich, das man so mit document.write bei ner select box options anfügen kann oder?

        Das geht vom Prinzip her - ich glaube, Du verhedderst Dich eher in der Reihenfolge von Server- und Client-seitigem Skripting. Beispiel:

        while(z < max)
           {
           <%
           while not rsBI1.EOF
           %>

        BI1[z][0] = "<%=rsBI1("MID")%>";
           BI1[z][1] = "<%=rsBI1("Beschaffungsinstrument")%>";
           BI1[z][2] = "<%=rsBI1("Bezeichnung")%>";

        if(<%=rsBI1("Beschaffungsinstrument")%> == BI)
           {
           tat++;
           }
           z++;
           <%
           rsBI1.MoveNext
           wend
           %>
           }

        Serverseitig wird zuerst ausgeführt, also while not rsBI1.EOF ... wend zuerst, mit quasi einem response.write als Methode - im Quelltext stünde dann also etwa:

        BI1[z][0] = "MID1";
           BI1[z][1] = "Beschaffungsinstrument1";
           BI1[z][2] = "Bezeichnung1";

        if("Beschaffungsinstrument1" == BI)
           {
           tat++;
           }
           z++;

        BI1[z][0] = "MID2";
           BI1[z][1] = "Beschaffungsinstrument2";
           BI1[z][2] = "Bezeichnung2";

        if("Beschaffungsinstrument2" == BI)
           {
           tat++;
           }
           z++;

        BI1[z][0] = "MID3";
           BI1[z][1] = "Beschaffungsinstrument3";
           BI1[z][2] = "Bezeichnung3";

        if("Beschaffungsinstrument3" == BI)
           {
           tat++;
           }
           z++;

        usw. usf. - darauf dann while(z < max) {...} anzuwenden ergibt nicht allzuviel Sinn.

        Außerdem:

        a) Wenn ich mich nicht mit den } verzählt habe, wird die definierte Funktion nie geschlossen.

        b) Ich finde auch keine Stelle, wo sie je aufgerufen würde.

        c) document.writeln("<selcet>"); und document.writeln("</selcet>"); funktionieren auch nicht wirklich :-)

        Schau Dir mal an was Dein Browser als Quelltext ausspuckt, das hilft Dir wahrscheinlich weiter.

        Grüße,
        Utz

        --
        Mitglied im Ring Deutscher Mäkler
        1. ich weis das mit dem server und clientseitigen...

          aber die werte im array stimmen die hab ich überprüft

          du siehst den funktionsaufruf nirgends weil ich den nich gepostet habe, wenn ich das ganze file poste wirds zu lang, das teil ist riesig. die funktion wird mit onchange bei einem anderen selectbox aufgerufen und der value wird als parameter übergeben.
          die writeln("<select>") habe ich nur zum test reingetan...

          1. Hallo,

            du siehst den funktionsaufruf nirgends weil ich den nich gepostet habe, wenn ich das ganze file poste wirds zu lang, das teil ist riesig.

            Kannst Du es irgendwie online stellen, um das nachvollziehen zu können? Sonst kann zumindest ich Dir ansonsten nicht mehr helfen.

            Grüße,
            Utz

            --
            Mitglied im Ring Deutscher Mäkler
            1. Ok, ich schneide einfach die SQLs und das meiste ASP etc weg um platz zu sparen_: funktionsaufruf bei onchange von beschaffungsinstrument

              vielen dank für deine hilfe :)
              ----------------------------------------
              <%
               '****************************************************************************************
                   Set rsBI1 = Server.CreateObject("ADODB.RecordSet")
                SQL = "Select * From Quelle;"
                rsBI1.open SQL, Conn,adOpenStatic, AdLockReadOnly
              '****************************************************************************************%>
              <html>
              <head>
              <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
              <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
              <style>
               BODY { font-family: Arial; font-size: 9pt}
               TABLE { font-family: Arial; font-size: 9pt}
               A:hover {color:"#EB0066"; font-size: bolder}
              </style>
              <base target="_self">
              <title>Bewerber Detail</title>
              <link rel="stylesheet" type="text/css" href="../CSS/BV.css">

              </head>

              <body bgcolor="#6699FF" link="#808080" vlink="#808080" alink="#EB0066">
              <!--#include file="adovbs.inc"-->
              <%response.Write(output & "<br>" & "<br>")%>

              <b><font size="3">Bewerber Detail</font></b>

              <form method="POST" action="B_Detail.asp?Action=Save&bid=<%=BID%>" ID=Form1>

              <table border="1" cellspacing="1" style="border-collapse: collapse" bordercolor="#FFFFFF" id="AutoNumber1" width="594" bgcolor="#99CCFF">

              <tr>
                  <td width="25%">Beschaffungsinstrument*</td>
                  <td width="25%"><select size="1" name="Beschaffungsinstrument" class="popup1" ID=Select3  onChange="javascript:anz(this.value)">
              <%while not rs3.eof
              if BBeschaffungsinstrument = rs3("IID") then
                       sel="SELECTED"
                      else
                       sel=""
                      end if%>
                     <option <%=sel%> value="<%=rs3("IID")%>"><%=rs3("InstrumentBezeichnung")%></Option>
                     <%rs3.movenext
                     wend
                     rs3.Close
                     %>
                    </select>
               </td>
                  <td width="25%">Ausprägung*</td>
                  <td>

              <select size="1" name="Auspragung" class="popup1" ID=Select4>

              <option value="" selected></option>

              <script type="text/javascript">
                function anz(BI)
                 {
                 <%rsBI1.MoveFirst%>
                 //Variablen-Definition
                 //**************************************************
                 var max = <%=rsBI1.RecordCount%>;
                 var z = 0;
                 var tat = 0;

              //Definition Gesamt-Array
                 var BI1 = new Array(max);
                 for(var i = 0; i < BI1.length; ++i)
                 {
                  BI1[i] = new Array(3);
                 }
                 //**************************************************

              //Abfüllen Gesamt-Array
                 //**************************************************

              while(z < max)
                 {
                 <%
                 while not rsBI1.EOF
                 %>

              BI1[z][0] = "<%=rsBI1("MID")%>";
                 BI1[z][1] = "<%=rsBI1("Beschaffungsinstrument")%>";
                 BI1[z][2] = "<%=rsBI1("Bezeichnung")%>";

              if(<%=rsBI1("Beschaffungsinstrument")%> == BI)
                 {
                 tat++;
                 }
                 z++;
                 <%
                 rsBI1.MoveNext
                 wend
                 %>
                 }

              //**************************************************

              //Anzeige
                z = 0;
                document.writeln("<selcet>");
                while(z < max)
                {

              if(BI1[z][1] == BI)
                 {
                 document.writeln("<option value='" + BI1[z][0] + "'>" + BI1[z][2] + "</option>");
                 }
                z++;
                }
                document.writeln("</selcet>");
                }
                </script>

              </select>
               </td>

              </tr>
                <tr>
                  <td width="25%">&nbsp;</td>
                  <td width="25%">&nbsp;</td>
                  <td width="25%">&nbsp;</td>
                  <td>&nbsp;</td>
                  <td><input type="submit" value="Speichern" name="Action" class="button1" ID=Submit1/></td>
                </tr>
              </table>
              </form>

              </body>
              </html>

              1. Hallo,

                und wie soll ich das jetzt testen können ohne Deine Datenbank und ohne adovbs.inc? Lass es bitte bei Dir lokal laufen, nimm die Quelltext-Anzeige aus Deinem Browser und lade das als *.htm irgendwo hoch, wenn's denn zu viel zum Posten wird.

                Grüße,
                Utz

                --
                Mitglied im Ring Deutscher Mäkler
                1. Hallo,

                  und wie soll ich das jetzt testen können ohne Deine Datenbank und ohne adovbs.inc? Lass es bitte bei Dir lokal laufen, nimm die Quelltext-Anzeige aus Deinem Browser und lade das als *.htm irgendwo hoch, wenn's denn zu viel zum Posten wird.

                  Grüße,
                  Utz

                  hallo
                  ich hab dir ne mail gemacht an die von dir angegebene adresse mit dem anhang

                  1. Hallo,

                    da hätt ich aber auch gleich drauf kommen müssen, sorry: document.write geht an so ner Stelle nur beim Laden der Datei, aus nem Funktionsaufruf heraus bringt es den von Dir beschriebenen Effekt. Wenn Du aus nem Funktionsaufruf heraus nachträglich Listeneinträge hinzufügen möchtest, musst Du das über DOM (z.B. mit appendChild(), http://de.selfhtml.org/javascript/objekte/node.htm#append_child) machen oder innerHTML (http://de.selfhtml.org/javascript/objekte/all.htm#inner_html, geht auch im Mozilla und neueren Operas, dann aber mit getElementById-Referenzierung) verwenden. appendChild() scheint für Deinen Fall wie geschaffen zu sein...Du hängst einfach Kinder in das <select>-Element, fertig.

                    Grüße,
                    Utz

                    --
                    Mitglied im Ring Deutscher Mäkler
                    1. Hi
                      das child zeugs sieht ein bisschen kompliziert aus für mich.. :/
                      könntest du mr ein beispiel für meinen speziellen fall machen?
                      vielen dank für den hinweis, hätte wahrscheinlich noch weis nicht wie lange nach dem fehler gesucht....

                      1. //Anzeige
                          z = 0;

                        document.getElementById("Auspragung").removeChild(document.getElementById("Auspragung").firstChild);

                        var newopt = document.createElement("option");

                        while(z < max){
                          if(BI1[z][1] == BI)
                          {
                          var newoptei = document.createTextNode(BI1[z][2]);
                          }

                        document.getElementById("Auspragung").appendChild(newopt);
                          document.getElementsByTagName("option")[z].appendChild(newoptei);
                          z++;
                          }

                        }

                        Ich habs mal probiert...
                        aber es gibt einen Typkonflikt!!???

                        keine ahnung an wases liegt
                        bitte helft mir ich mag nicht mehr :( ;)

                        1. Hallo,

                          erstens: nimm die Funktion da weg wo sie jetzt ist und tu sie z.B. in den Head - Grund: Löschen der bisherigen Kinder von <select> würde versuchen, die Funktion selber mitzulöschen. Du brauchst sie auch nicht an der Stelle zu stehen haben.

                          z = 0;

                          // so lange die select-Liste Kinder hat
                          while(document.getElementById("Select4").hasChildNodes())
                            {
                              // setze das erste auf den Variablennamen "knoten"
                              knoten = document.getElementById("Select4").firstChild;
                              // und lösche es
                              document.getElementById("Select4").removeChild(knoten);
                            }
                          while(z < max)
                            {
                              if(BI1[z][1] == BI)
                                {
                                  // kreiere ein neues option-Element
                                  newOption = document.createElement("option");
                                  // weise ihm das Attribut value mit Inhalt zu
                                  newOption.setAttribute("value", BI1[z][0]);
                                  // Text zwischen <option> und </option>
                                  newOptionText = document.createTextNode(BI1[z][2]);
                                  // Hänge den Text ans Option-Element
                                  newOption.appendChild(newOptionText);
                                  // Hänge das Option-Element in die Select-Liste
                                  document.getElementById("Select4").appendChild(newOption);
                                }
                              z++;
                            }
                          }

                          Grüße,
                          Utz

                          --
                          Mitglied im Ring Deutscher Mäkler
                          1. Hallo
                            Oh MEIN GOTT
                            WAU!!!
                            JUHUUUUU!!!
                            JiPIEEEEE

                            Vielen Dank :)))

                            :D

                            :D

                            endlich funktionierts

                            jaaa
                            thx so much

                            greeeeez tschanne

      2. Hallo tschanne,

        Warum willst Du die Options eigentlich mit Javascript schreiben?
        Einfacher wäre doch, auch die Auswahlliste schon serverseitig zu generieren:

        <select size="1" name="Auspragung" class="popup1" ID=Select4>

        <option value="" selected></option>

        <%
        rsBI1.MoveFirst
        while not rsBI1.EOF
          Response.Write "<option value='" + rsBI1("MID") + "'>" + rsBI1("Bezeichnung") + "</option>"
          rsBI1.MoveNext
        wend
        %>

        </select>

        Grüße
        Andreas

        --
        "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning."
        (Rich Cook)
        1. darauf wäre ich auch gekommen

          aber es soll ja nicht alle in die box tun sondern nur die mit dem fremdsclüssel = BI