tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
240
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Maik20 Maik20 ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    214
    Hallo

    ich habe folgendes Script:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    
    <script type=\"text/javascript\" language=\"javascript\"> 
            <!-- 
            elements = new Array(); 
                elements[1] = new Array(\"foo\", \"bar\"); 
                elements[2] = new Array(\"bar\"); 
                elements[3] = new Array(\"foo\"); 
      
            function change() { 
                // vorhandene options aus Select-Field löschen
                alert ('CHANGE');
                if (document.all) { 
                    alert ('CHANGE2');
                    document.formName.elemList.length = 0; 
                } else{ 
                    //  vorhandene options aus Select-Field löschen 
                    alert ('CHANGE3');
                    var anzChilds = document.getElementById(\"elemList\").childNodes.length; 
                    for(var i=0; i<anzChilds; i++) { 
                        document.getElementById(\"elemList\").removeChild(document.getElementById(\"elemList\").childNodes[i]); 
                    } 
                } 
                alert ('CHANGE4');
                var chooserValue = document.getElementById(\"chooser\").value; 
                
                for(i=0; i<elements[chooserValue].length; i++) { 
                    var newOption = document.createElement(\"option\"); 
         
                 // value-Attribut des OPTION-Tags erzeugen 
                    var optionValue = document.createAttribute(\"value\"); 
                    optionValue.nodeValue = elements[chooserValue][i]; 
                    newOption.setAttributeNode(optionValue); 
         
               //   Daten zwischen <option></option> setzen 
                    var optionText = document.createTextNode(elements[chooserValue][i]); 
                    newOption.appendChild(optionText); 
             
                    document.getElementById(\"elemList\").appendChild(newOption); 
                }   
      
            } 
            //--> 
            </script> ";

    Führe ich dieses aus, bekomme ich die alert-Box "CHANGE" und "CHANGE2" zu sehen. Jedoch niemals eine "CHANGE4". Eigentlich müsste er doch weiterlaufen oder nicht?

    Das ist der HTML Code dazu:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    echo "
            <select size=\"1\" name=\"chooser\" id=\"chooser\" onchange=\"change()\"> 
     <option value=\"\" selected=\"selected\"> - Bitte ausw&auml;hlen - </option> 
     <option value=\"1\">Elem A</option> 
     <option value=\"2\">Elem B</option> 
     <option value=\"3\">Elem C</option> 
    </select> 
     
    <select size=\"4\" name=\"elemList\" id=\"elemList\"> 
        <option>Bitte w&auml;hlen Sie zuerst etwas aus</option> 
    </select> ";

    Da die Ausgabe in PHP erfolgt sind die " mit einem \" versehen. Das ist korrekt.

    Wer kann mir helfen?
     

  2. #2
    Avatar von awortmeier
    awortmeier awortmeier ist offline Mitglied Gold
    Registriert seit
    Jun 2009
    Beiträge
    164
    Hallo,
    ich bin mir nicht ganz sicher.
    aber gibt es ein }else{ bei Funktionen?

    Du hast

    Code :
    1
    2
    3
    4
    5
    
    function change(){
    ...
    }else{
    ...
    }

    gemacht.
     

  3. #3
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin Maik,

    auf den 1. Blick würde ich folgendes verdächtigen:
    Code :
    1
    2
    3
    
    for(var i=0; i<anzChilds; i++) { 
                        document.getElementById(\"elemList\").removeChild(document.getElementById(\"elemList\").childNodes[i]); 
                    }

    Also angenommen, #elementList hat mehr als 1 childNode.

    der 1. geht immer OK
    sobald du jedoch die Hälfte der Kindknoten entfernt hast, greift dein removeChild() ins Leere, weil sich ja mit jeder Ausführung die Anzahl der Kindknoten um 1 reduziert.

    Also..bspw..
    2. Kindknoten

    1.Aufruf....1. Kindknoten entfernen(es gibt jetzt nur noch 1 Kindknoten)
    2. Aufruf....2. Kindknoten entfernen(Fehler, weil es nur noch 1 Kindknoten gibt)

    Lösungsvorschlag:
    fange mit dem letzten Kindknoten an, und arbeite dich zum ersten vor, oder arbeite mit while und entferne so lange den 1. Kindknoten, wie es einen gibt.
     

  4. #4
    Maik20 Maik20 ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    214
    Danke,

    wie kann ich denn prüfen ob der Knoten existiert? Gibt es sowas wie:

    document.getElementById(\"elemList\").existsChildNodes[i] ?
     

  5. #5
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Wenn du die Anzahl Childnodes kennst(und die kennst du)....dann weisst du auch ob eine bestimmter childNode existiert.

    i muss mindestens um 1 kleiner sein als die Anzahl der childNodes, dann existiert der Knoten.
     

Ähnliche Themen

  1. Schleife bricht bei 1 ab?
    Von tomengel im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 02.07.09, 18:36
  2. shell_exec() bricht ab
    Von Passer im Forum Linux & Unix
    Antworten: 2
    Letzter Beitrag: 19.06.09, 00:12
  3. Antworten: 4
    Letzter Beitrag: 26.08.08, 14:50
  4. foreach bricht ab
    Von penntuete im Forum PHP
    Antworten: 2
    Letzter Beitrag: 10.02.08, 23:39
  5. Warum bricht mein Layout zsuammen?
    Von PHPer im Forum HTML & XHTML
    Antworten: 7
    Letzter Beitrag: 05.08.04, 11:06