ChainedSelectors

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Also, das ist der Code rund um Zeile 186, es wird also nur die Funktion aufgerufen.

    Code:
    <script type="text/javascript">
    <!--
        update_drp2()
    -->
    </script>
    Die Funktion sieht wie folgt aus:
    Code:
    function update_drp2() {
        var x=document.frm_auswahl.drp2.length;
        for(var n=0; n<x; n++)
            document.frm_auswahl.drp2.options[0]=null;
        for(n=0; n<liste2.length; n++) {
            if(liste2[n][2]==document.frm_auswahl.drp1.value) {
                var NeuerEintrag=new Option(liste2[n][1], liste2[n][0]);
                document.frm_auswahl.drp2.options[document.frm_auswahl.drp2.length]=NeuerEintrag;
            }
        }
    }
    Das Genie überblickt das Chaos!

    Wer Rechtschreibfehler findet, darf sie behalten!

    Kommentar


    • #17
      Teste mal in einem Browser mit besserer Javascript-Konsole, bspw. dem Firefox.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #18
        Also, ich hab's mal im Firefox getestet und mir die JavaScript-Konsole aufgerufen. Liefert folgende drei Fehlermeldungen:

        Fehler: missing ; before statement
        Quelldatei: http://www.meinserver.de/meinedatei.php
        Zeile: 1294, Spalte: 20
        Quelltext:
        liste2[427][2]=Hewlett Packard;

        Fehler: update_drp2 is not defined
        Quelldatei: http://www.meinserver.de/meinedatei.php
        Zeile: 1386

        Fehler: update_drp2 is not defined

        Code:
        <script type="text/javascript">
        <!--
            update_drp2()            // Zeile 1386
        -->
        </script>
        Ich nehme mal an, es hat auch was mit dem Leerzeichen zwischen Hewlett und Packard zu tun, oder?
        Das Genie überblickt das Chaos!

        Wer Rechtschreibfehler findet, darf sie behalten!

        Kommentar


        • #19
          Okay, ich hab den Fehler jetzt gefunden. Hier nochmal der komplette, funktionsfähige Code:

          Hier das JavaScript für den <head>-Tag:
          Code:
          <script type="text/javascript">
          <!--
          PHP-Code:
          <?php
          // abhängiges Kombifeld erzeugen
              
          $rs mysql_query("SELECT * FROM `datenbank1`");
              
          $rows mysql_num_rows($rs);
              echo 
          "\tvar liste2=new Array($rows)\n"
              
          "\tfor(var i=0;i<liste2.length;i++)\n"
              
          "\t\tliste2[i]=new Array(2);\n";
              
          $n=0;
              while(
          $zeile mysql_fetch_assoc($rs)) {
                  echo 
          "\tliste2[$n][0]=".$zeile['id'].";\n"
                  
          "\tliste2[$n][1]='".$zeile['modell']."';\n"
                  
          "\tliste2[$n][2]='".$zeile['hersteller']."';\n";
                  
          $n++;
              }
          ?>
          Code:
          function update_drp2() {
              var x=document.frm_auswahl.drp2.length;
              for(var n=0; n<x; n++)
                  document.frm_auswahl.drp2.options[0]=null;
              for(n=0; n<liste2.length; n++) {
                  if(liste2[n][2]==document.frm_auswahl.drp1.value) {
                      var NeuerEintrag=new Option(liste2[n][1], liste2[n][0]);
                      document.frm_auswahl.drp2.options[document.frm_auswahl.drp2.length]=NeuerEintrag;
                  }
              }
          }
          -->
          </script>
          Und hier der Code für den <body>-Tag:
          Code:
          <form name="frm_auswahl">
              <select name="drp1" size="1" onChange="update_drp2()">
          PHP-Code:
              <?php
                  $rs 
          mysql_query("SELECT * FROM `datenbank1` GROUP BY hersteller");
                  while(
          $zeile mysql_fetch_assoc($rs)) {
                      echo 
          "<option value=\"".$zeile['hersteller']."\">".$zeile['hersteller']."</option>\n";
                  }
              
          ?>
          Code:
              </select>
              <select name="drp2" size="1">
                  <option>Start</option>
              </select>
          </form>
          <script type="text/javascript">
          <!--
              update_drp2()
          -->
          </script>
          Das Genie überblickt das Chaos!

          Wer Rechtschreibfehler findet, darf sie behalten!

          Kommentar


          • #20
            Hi,

            schön das es funktioniert aber wo ist die alternative für
            menschen die sich trauen jscript auszuschalten ?

            greets
            (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

            Kommentar


            • #21
              Habe noch ein weiteres Problem, beim Ausbauen des Formulars, ist mir aufgefallen, dass beim Auswählen eines Herstellers im zweiten Selectfeld gleich das erste Modell angezeigt wird.
              Ich hätte jedoch gerne, dass dort "Modell auswählen" steht. Grund dafür ist, dass der User mehr oder weniger dazugezwungen werden soll, ein Modell auszuwählen. Da sich die Länge des Selectfeldes nach dem längsten Eintrag richtet, wäre auch das Problem gelöst.

              Kann mir jemand sagen, wie ich "Modell auswählen" als ersten und damit vorausgewählten Inhalt realisiere?

              Code:
              function update_drp2() {
                 var x=document.frm_auswahl.drp2.length;
                 var hersteller = document.frm_auswahl.drp1.value;
                    if(hersteller=="Hersteller auswählen") {
                       document.frm_auswahl.drp2.value="Modell auswählen";
                    }
                    else{
                       for(var n=0; n<x; n++)
                       document.frm_auswahl.drp2.options[0]=null;
                       for(n=0; n<liste2.length; n++) {
                          if(liste2[n][2]==document.frm_auswahl.drp1.value) {
                             var NeuerEintrag=new Option(liste2[n][1], liste2[n][0]);
                             document.frm_auswahl.drp2.options[document.frm_auswahl.drp2.length]=NeuerEintrag;
                          }
                       }
                    }
              }
              Das Genie überblickt das Chaos!

              Wer Rechtschreibfehler findet, darf sie behalten!

              Kommentar


              • #22
                nun, du siehst ja selbst, welche zwei zeilen einen neuen eintrag erzeugen (oder?).

                dann setze diese zeilen vor die for-schleife und passe die parameter an.
                wichtig ist noch, dass du die for-schleife dann ab 1 laufen lässt (weil 0 dann mit der "einladung" vorbelegt ist).

                Kommentar


                • #23
                  Okay, das wollte ich hören. Hatte das schon mal versucht, aber irgendwie musste da wohl ein Fehler drin gewesen sein. Jetzt funktionierts.

                  Code:
                  function update_drp2() {
                     var x=document.frm_auswahl.drp2.length;
                     var hersteller = document.frm_auswahl.drp1.value;
                        if(hersteller=="Hersteller auswählen") {
                           document.frm_auswahl.drp2.value="Modell auswählen";
                        }
                  		else{
                           for(var n=1; n<x; n++)
                           var NeuerEintrag=new Option('  - Modell auswählen -  ','Modell auswählen');
                           for(n=1; n<liste2.length; n++) {
                              if(liste2[n][2]==document.frm_auswahl.drp1.value) {
                                 var NeuerEintrag=new Option(liste2[n][1], liste2[n][0]);
                                 document.frm_auswahl.drp2.options[document.frm_auswahl.drp2.length]=NeuerEintrag;
                                 document.frm_auswahl.drp2.disabled=false;
                              }
                           }
                        }
                  }
                  Das Genie überblickt das Chaos!

                  Wer Rechtschreibfehler findet, darf sie behalten!

                  Kommentar


                  • #24
                    Okay, jetzt muss ich diesen Thread doch noch einmal aufgreifen und nocheinmal ein Problem schildern.

                    Jetzt gibt es folgendes Problem:
                    Wenn man jetzt einen Hersteller auswählt, werden dessen Modell aufgeführt (das passt ja soweit), aber wenn man jetzt hergeht und doch einen anderen Hersteller auswählt, dann werden die Modelle des zuerst ausgewählten Herstellers angezeigt und darunter die des aktuell ausgewählten Herstellers.
                    Wählt man jetzt einen dritten Hersteller aus, so werden dessen Modelle unter denen der beiden ersten aufgelistet. Die Modell werden also immer hinten angehängt.

                    Hab jetzt schon einiges probiert die Liste wieder zu löschen, bevor die neuen Modelle ausgegeben werden, aber ich scheiter immer wieder auf's neue an JavaScript. Kann mir jemand sagen, wo der Fehler liegt?

                    Hier nochmal mein aktueller Code:
                    Code:
                    function update_drp2() {
                       var x=document.frm_auswahl.drp2.length;
                       var hersteller = document.frm_auswahl.drp1.value;
                          if(hersteller=="Hersteller auswählen") {
                             document.frm_auswahl.drp2.value="Modell auswählen";
                          }
                          else{
                             for(var n=1; n<x; n++)
                             var NeuerEintrag=new Option('  - Modell auswählen -  ','Modell auswählen');
                             for(n=1; n<liste2.length; n++) {
                                if(liste2[n][2]==document.frm_auswahl.drp1.value) {
                                   var NeuerEintrag=new Option(liste2[n][1], liste2[n][0]);
                                   document.frm_auswahl.drp2.options[document.frm_auswahl.drp2.length]=NeuerEintrag;
                                   document.frm_auswahl.drp2.disabled=false;
                                }
                             }
                          }
                    }
                    Das Genie überblickt das Chaos!

                    Wer Rechtschreibfehler findet, darf sie behalten!

                    Kommentar


                    • #25
                      Original geschrieben von chefdesigner
                      Hab jetzt schon einiges probiert die Liste wieder zu löschen, bevor die neuen Modelle ausgegeben werden
                      selfhtml: Elemente aus Auswahlliste löschen:
                      Elemente können Sie löschen, indem Sie Ihnen den Wert null zuordnen. Alternativ ist es auch möglich, dem Option-Array eine neue Länge zuzuweisen.
                      Wenn du also das Modell-Selectfeld bei jeder Herstellerwahl neu aufbauen willst, würde ich letztere Methode empfehlen: .length des Selects auf 0 setzen, bevor du die neuen Options erstellst und einhängst.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #26
                        Also, ich hab's jetzt so gemacht, weiss aber nicht, ob die Lösung sauber ist. Funktionieren tut's jedenfalls.

                        Code:
                        function update_drp2() {
                           var x=document.frm_auswahl.drp2.length;
                           var hersteller = document.frm_auswahl.drp1.value;
                              if(hersteller=="Hersteller auswählen") {
                                 document.frm_auswahl.drp2.value="Modell auswählen";
                                 document.frm_auswahl.drp2.disabled=true;
                              }
                              else{
                                 for(var n=1; n<x; n++)
                                 document.frm_auswahl.drp2.options[1]=null;
                                 var NeuerEintrag=new Option('  - Modell auswählen -  ','Modell auswählen');
                                 for(n=1; n<liste2.length; n++) {
                                    if(liste2[n][2]==document.frm_auswahl.drp1.value) {
                                       var NeuerEintrag=new Option(liste2[n][1], liste2[n][0]);
                                       document.frm_auswahl.drp2.options[document.frm_auswahl.drp2.length]=NeuerEintrag;
                                       document.frm_auswahl.drp2.disabled=false;
                                    }
                                 }
                              }
                        }
                        Passt die Lösung so, oder geht das schöner?
                        Das Genie überblickt das Chaos!

                        Wer Rechtschreibfehler findet, darf sie behalten!

                        Kommentar

                        Lädt...
                        X