probleme mit removeChild

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

  • probleme mit removeChild

    bastel gerade an meiner ersten ajax-anwendung und stehe vor folgendem problem:

    user gibt in ein textfeld zwei buchstaben ein, aus einer db werden alle länder gezogen, die damit anfangen und dann mit js in ein select-feld eingehängt. klappt wunderbar, nur beim löschen gibt es ein typisches (heißt seltsames) js-problem. hier der relevante code
    PHP-Code:
    // Erzeugt die Option-Felder
    for (0land.lengthi++)
    {
       var list = 
    document.createElement('option');
       var 
    eingabe document.createTextNode(land[i]);
       list.
    appendChild (eingabe);
       
    document.getElementById('listing').appendChild(list);  
       
    document.getElementById('listing').childNodes[i].setAttribute('value'land[i]);                 
    }

    // Soll alle oben erzeugten option-felder wieder entfernen
    num document.getElementById('listing').childNodes.length;
    for (
    0numi++)
    {                
       
    wech document.getElementById('listing').childNodes[i];
       
    document.getElementById('listing').removeChild(wech);

    kommentiere ich document.getElementById('listing').removeChild(wech); aus, wird die schleife komplett durchlaufen (also z.b. acht mal), ansonsten nur halb, also viermal und dabei wird nur jedes zweite option-feld gelöscht. browser spielt keine rolle, phänomen tritt überall auf.

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

  • #2
    Re: probleme mit removeChild

    Phänomen? Lustig ...
    Wenn du mal ein bisschen genauer nachdenkst, wirst du erkennen, dass genau das passieren muss.

    Die childNodes-Collection ist, wie alle anderen Element-Collections auch, dynamischer Natur. Ändert sich etwas im Dokument, änder(t|n) sich die betreffende(n) Collection(s) automatisch mit.


    So, jetzt hast du von deinen Acht Options also die erste (Index 0) entfernt, und im nächsten Schleifendurchlauf steht dein Zähler auf 1.
    Da du die erste Option entfernt hast, gibt es jetzt aber nur noch sieben childNodes - die natürlich wieder Indices von 0 bis 7 haben. Der Schleifenzähler steht aber wie gesagt schon auf 1, also wird nur die zweite von denen entfernt, die erste bleibt ab jetzt vollkommen unbehelligt.

    Und so weiter und so fort ...



    Aber warum machst du das überhaupt so kompliziert?
    http://de.selfhtml.org/javascript/ob...mente_loeschen
    Und wenn du alle Options auf einmal entfernen willst - length auf 0 setzen, und fertig.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3


      danke
      peter
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar

      Lädt...
      X