select Inhalt komplett löschen mittles JS

  • Hallo,

    habe folgendes select Feld:

    <select name="ckName"><option>none</option></select>

    Den Inhalt des Select wollte ich komplett löschen lassen:

    deleteSelectOptions(document.getElementsByName("ckName"));

    dazu fand ich folgenden Tipp:

    function deleteSelectOptions(feld){
    var laenge = feld.length;
    for (i=0; i <laenge; i++){
    feld.options[feld.length-1] = null;
    }
    }

    im Firebug meldet er mir aber bei "feld.options[feld.length-1] = null;" folgendes Problem: feld.options has no properties

    Idee dazu?

    Gruß Thomas

  • Moin!

    Das Script ist fehlerhaft, schau es dir mal genau an, das kann gar nicht funktionieren:

    Stell dir mal vor, dein Select-Feld hat 5 Einträge (option[0] bis option[4]))

    nun das Script (ich habe es mal etwas auskommentiert):

    Code
    function deleteSelectOptions(feld){
    var laenge = feld.length;                             // die Feldlänge ist zu diesem Zeitpunkt == 5   
    for (i=0; i <laenge; i++){                           // die Schleife wird 5x durchlaufen, i hat dabei die Werte 0,1,2,3 und 4, bei i == 5 bricht die Schleife ab
    feld.options[feld.length-1] = null;                 // die Anzahl der Options wurde vor der Schleife gemessen und dann nie wieder, 'feld.length' ist also immer 5
                                                                    // 5-1 ist auch immer 4, d.h. es wird ständig versucht, das option[4] zu löschen und nur das!
                                                                    //  nach dem errsten Schleifendurchlauf ist das option aber gar nicht mehr vorhanden = Fehlermeldung
    }
    }


    So müßte es klappen (ungetestet):

    Code
    function deleteSelectOptions(feld)
      {
       for (i=feld.length; i > 0; i--)  { feld.options[i-1] = null; }
      }

    G.a.d.M.

    Ronald

  • Hallo Ronald,

    habe das Problem gefunden. Das Problem ich darf die Funktion so nicht aufrufen (mittles document.getElementsByName("ckName")) sondern mittels z.B. deleteSelectOptions(document.forMitPlanTab.ckName) dann geht es wunderbar.

    Code
    feld.options[feld.length-1] = null;                 // die Anzahl der Options wurde vor der Schleife gemessen und dann nie wieder, 'feld.length' ist also immer 5

    Ist nicht ganz richtig, vom Kommentar her, in der Klammer wird die aktuelle Feld Länge (Anzahl der Array Einträge) verwendet, Zuerst sind es 5 Elemente nach der ersten "null" Zuweisung nur mehr vier und dadurch geht es.

    Trotzdem vielen Dank und Gruß
    Thomas