Problem mit JavaScript: SELECT -> Löschen und Hinzufügen von OPTION



  • hallo

    ich habe mit folgendem javascript probleme. möchte sobald eine haupt select onchange auslöst, das zwei andere dann vorher gelöscht werden und dann in die jeweilige neue einträge hinzugefügt werden. was an dem ganzen nicht richtig funktioniert ist, dass die einträge zuvor nicht komplett gelöscht werden und es dann beim hinzufügen ein durcheinander gibt.

    anbei der code:

    <script type="text/JavaScript">
    function delcbox()
    {
    	for(i = 0; i < document.form1.ComboBox1.length; i++)
    	{
    		document.form1.ComboBox1.options[document.form1.ComboBox1.length - 1] = null;
    	}
    	for(i = 0; i < document.form1.ComboBox2.length; i++)
    	{
    		document.form1.ComboBox2.options[document.form1.ComboBox2.length - 1] = null;
    	}
    }
    function addcbox(list, text)
    {
    	var option = document.createElement("OPTION");
    	var Text = document.createTextNode(text);
    	option.appendChild(Text);
    	list.appendChild(option);		 	
    }
    function fillcbox(index)
    {
    	var text1 = "a; b; c; d; e; f; g;";
    	var text2 = "1; 2; 3; 4; 5; 6; 7;";
    	var text3 = "!; ?; '; ^; "; *;";
    	var list1 = text1.split("; ");
    	var list2 = text2.split("; ");
    	var list3 = text3.split("; ");
    
    	delcbox();
    	switch(index)
    	{
    		case 0:
    		{
    			for(i = 0; i < list2.length; i++)
    			{
    				addcbox(document.form1.ComboBox2, list2[i]);
    			}
    			break;
    		}
    		case 2:
    		{
    			for(i = 0; i < list3.length; i++)
    			{
    				addcbox(document.form1.ComboBox2, list3[i]);
    			}
    			break;
    		}
    		case 3:
    		{
    			for(i = 0; i < list1.length; i++)
    			{
    				addcbox(document.form1.ComboBox1, list1[i]);
    			}
    			break;
    		}
    	}
    }
    </script>
    

    das onchange wie folgt:

    <select size="1" name="cbox" onchange='Javascript:fillcbox(this.selectedIndex)'>
    


  • var text3 = "!; ?; '; ^; "; *;";
    

    Hier müsstest du wohl das " im String maskieren - ober z.B. als " schreiben...



  • hallo und danke war ein kleiner tippfehler aber geht trotzdem nicht. war nicht davon abhängig. was könnte den sonst noch falsch sein?



  • du hast einen Fehler in deiner Löschfunktion:
    füge mal folgendes zum Debuggen ein

    function delcbox()
    {
        for(i = 0; i < document.form1.ComboBox1.length; i++)
        {
            [b]alert(document.form1.ComboBox1.length + " - " + i);[/b]
            document.form1.ComboBox1.options[document.form1.ComboBox1.length - 1] = null;
        }
        for(i = 0; i < document.form1.ComboBox2.length; i++)
        {
            [b]alert(document.form1.ComboBox2.length + " - " + i);[/b]
            document.form1.ComboBox2.options[document.form1.ComboBox2.length - 1] = null;
        }
    }
    

    dabei wirst du schnell feststellen, daß deine Abbruchbedingung für die For-Schleifen immer nach der Hälfte erfüllt ist
    besser ist es hier die Schleife entweder als while-Schleife zu machen oder verkehrt herum abzuarbeiten

    for(i = document.form1.ComboBox2.length; i > 0; i--)
    //oder
    while (document.form1.ComboBox2.length > 0)
    


  • Deine for-Schleifen in delcbox arbeiten nicht korrekt. So klappt es bei mir:

    function delcbox()
    {
        for(i = document.form1.ComboBox1.length-1; i >= 0; i--)
        {
            document.form1.ComboBox1.options[i] = null;
        }
        for(i = document.form1.ComboBox2.length-1; i >= 0; i--)
        {
            document.form1.ComboBox2.options[i] = null;
        }
    }
    

    Das Problem bei deiner Variante ist, dass die obere Grenze document.form1.ComboBox1.length ja während des Löschvorgangs immer kleiner wird und da du gleichzeitig i hochzählst, fehlen dir am Ende noch einige Einträge. Oder noch etwas kürzer:

    function delcbox()
    {
        while(document.form1.ComboBox1.length > 0)
        {
            document.form1.ComboBox1.options[0] = null;
        }
        while(document.form1.ComboBox2.length > 0)
        {
            document.form1.ComboBox2.options[0] = null;
        }
    }
    

    edit: da war wohl jemand schneller...



  • vielen dank 🕶


Anmelden zum Antworten