removeChild-Problem

dasIcebaer

Grünschnabel
Nach meinen ursprünglichen Posting von gestern gibt es nun mit dem Code ein neues Problem: Das entfernen von Childs.

Code:
function clone_this(objBtn) {
	var objClone = objBtn.parentNode.cloneNode(true);
	objBtn.parentNode.parentNode.appendChild(objClone);
	for (j=0;j<objBtn.parentNode.parentNode.lastChild.childNodes.length;j++)
	{
		if (objBtn.parentNode.parentNode.lastChild.childNodes[j].type=='text')
		{
			objBtn.parentNode.parentNode.lastChild.childNodes[j].value='';
		}
	}
	objBtn.value="entfernen";
	objBtn.style.background="#c33";
	objBtn.onclick=new Function('remove_this', 'this.parentNode.parentNode.removeChild(this.parentNode)');
}



function remove_this(objBtn) {
	this.parentNode.parentNode.removeChild(this.parentNode);
}

Das dazugehörige Element sieht so aus:

HTML:
<fieldset>
	<ol>
		<li>
			<input type="text" name="partiesGer[]" value="partei 1" />
			<input type="text" name="partiesEng[]" value="party 1" />
			<input value="entfernen" type="button" onclick="remove_this(this)">
		</li>
																			<li>
			<input type="text" name="partiesGer[]" value="partei 3" />
			<input type="text" name="partiesEng[]" value="party 3" />
			<input value="neue Zeile" type="button" onclick="clone_this(this)">
		</li>
	</ol>
</fieldset>

Zur Erläuterung:
Beim klicken auf "neue Zeile" (im zweiten <li>..</li>-Block) wird der komplette <li>..</li>-Baum geklont und unten angehängt; gleichzeitig wird der geklickte Button in einen "delete"-Button geändert, damit die Zeile gelöscht werden kann. Soweit klappt auch alles.

Jetzt kann es aber sein, dass - falls der Benutzer Fehler bei der Eingabe macht - die eingegebenen Daten wieder reingeladen werden. Dann entsteht ein Block wie oben, mit z.B. zwei (alten) Einträgen.

Die Funktionalität von "neue Zeile" funktioniert, die letzte Zeile kann auch auf den (anschließend vorhandenen) "entfernen"-Button wieder gelöscht werden, aber der alte "Entfernen"-Button funktioniert nicht (der erste <li>..</li>-Block). Die Fehlermeldung auf der Konsole ist "this.parentNode has no properties".

Kann jemand erklären, was da falsch läuft?
 
Hi,

in deiner Funktion remove_this muss das Objekt, von dem ausgegangen wird, objBtn heissen, nicht this. Denn this wäre in diesem Fall eine Referenz auf das window-Objekt und nicht auf die Schaltfläche.
Code:
function remove_this(objBtn) {
  objBtn.parentNode.parentNode.removeChild(objBtn.parentNode);
}
Ciao
Quaese
 

Neue Beiträge

Zurück