RemoveChild() bug
Sziasztok!
Egy FORM-hoz szeretnék dinamikusan elemeket hozzáadni/elvenni, ehhez írtam is egy JS kódot, ami egy változó szerint ad hozzá vagy vesz el inputokat.
A hozzáadás gond nélkül működik, de az elvétel számomra érthetetlenül működik (a kódban elkülönítve vannak egy if-else ággal). A kódnak csak egy kis része érdekes:Tehát van két változóm, egyikben az inputok mostani darabszáma, a másikban a kívánt darabszám. Az alert() egyértelműen kiírja, hogy mennyit kell elvenni, tehát a változók jó, de utánna a for ciklus nem fut le csak mondjuk félig (életből vett példa: most = 10, dbkell = 5, akkor a kulonbseg = 5 lesz helyesen, mégis csak 2-t vesz el).
Az eredmények mind FireFoxban, mind Operában rosszak, IE alatt viszont jó.
Mit rontok el?
■ Egy FORM-hoz szeretnék dinamikusan elemeket hozzáadni/elvenni, ehhez írtam is egy JS kódot, ami egy változó szerint ad hozzá vagy vesz el inputokat.
A hozzáadás gond nélkül működik, de az elvétel számomra érthetetlenül működik (a kódban elkülönítve vannak egy if-else ággal). A kódnak csak egy kis része érdekes:
var kulonbseg = most - dbkell;
alert(kulonbseg);
var element = document.getElementById('kepek');
for (i = 0; i < kulonbseg; i++) {
element.removeChild(element.lastChild);
}
Az eredmények mind FireFoxban, mind Operában rosszak, IE alatt viszont jó.
Mit rontok el?
*1
Megszoroztam 1-el!
s_volenszki
szerk.:
Más utasítással végigmegy a ciklus? Mondjuk ha a removeChild utasítást kicseréld egy alert(i);-re
lastChild != utolsó elem
lastChild
nem az utolsó elemet jelenti, hanem az utolsó node-ot, ami lehet pl.TEXT_NODE
is. A HTML elemek közé rakott whitespace karakterek böngészőkben ilyen szöveges node-ok, Exporerben meg nem.Ha nem formáznád azt a HTML kódrészt, mindent egy sorba írnál, akkor máris jó lenne, de ennél nyilván vannak sokkal jobb megoldások is. A
nodeType
-pal tudod lekérdezni a típust.Whitespace in the DOM
re
üdv t
ui : IE + removeChild-nál pedig a ciklikus referenciáknál fellépő memória szivárgásra : http://javascript.crockford.com/memory/leak.html ügyeljünk
köszi