2017-03-08 2 views
0

So habe ich eine einfache Tabelle mit Eingabeelementen und ich muss dynamisch neue Zeilen hinzufügen.JavaScript cloneNode: SELECT hält einige unerwünschte Bindung

Eine der Zellen enthält ein SELECT-Element und eine Liste von OPTIONS, die mit cloneNode() repliziert werden.

Das Problem ist: Wenn ich eines der replizierten SELECT-Elemente ändern, ändert sich der Index der ursprünglichen SELECT auch auf den gleichen Wert, als ob eine Art "Bindung" durch den Klonprozess zurückgelassen wurde.

Meine Tabelle sieht wie folgt aus:

<table> 
    <tr> 
     <th>Header</th> 
    </tr> 
    <tr> 
     <td> 
      <select> 
       <option>Options</option> 
      </select> 
     </td> 
    </tr> 
</table> 

Die Klonierung Routine ist relativ komplex, da ich Zellen-IDs, Elementnamen und andere Dinge ändern müssen, aber es läuft darauf hinaus, so etwas wie dieses nach unten:

var table = document.querySelector('#table'); 
var rows = table.querySelectorAll('tr'); 

for (var x = 0; x < 5; x++) 
{ 

    row = rows[1].cloneNode(true); 

    // Changes everything that needs to be changed 

    table.appendChild(row); 

} 

Weiß jemand, was das ursprüngliche SELECT veranlassen könnte, zu den replizierten "gebunden" zu werden?

Vielen Dank im Voraus!

+1

Wie aktualisieren Sie den Wert? – dandavis

+0

Das Problem besteht möglicherweise nicht im Klon-Vorgang, sondern in der Art und Weise, wie Sie Ihren Index aktualisieren –

+1

@TrinhHoangNhu: Es gibt kein "darf" darüber, cloneNode() verbindet nichts;) – dandavis

Antwort

1

Vielen Dank für alle Kommentare! Es stellte sich heraus, dass es sich um einen einfachen Fehler handelte: Ich hatte dem Knoten über addEventListener() ein Ereignis hinzugefügt, das den ursprünglichen SELECT-Befehl auf den gleichen Index des replizierten Elements ausführte.

Verwandte Themen