Warum bricht er ab?

Maik20

Erfahrenes Mitglied
Hallo

ich habe folgendes Script:

Code:
<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:
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?
 
Hallo,
ich bin mir nicht ganz sicher.
aber gibt es ein }else{ bei Funktionen?

Du hast

Code:
function change(){
...
}else{
...
}

gemacht.
 
Moin Maik,

auf den 1. Blick würde ich folgendes verdächtigen:
Code:
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.
 
Danke,

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

Code:
document.getElementById(\"elemList\").existsChildNodes[i] ?
 
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.
 

Neue Beiträge

Zurück