Homepage selbermachen 7.851 Themen, 35.615 Beiträge

Problem bei JS-Funktion: Wo ist der Fehler?

wlaner / 6 Antworten / Baumansicht Nickles

Hallo,
mein Problem: Eine JS-Funktion macht nicht (sofort) das was sie soll, erst beim zweiten Aufruf.

Hier erstmal der Quellcode-Ausschnitt:

  
<div id="1" class="noBlock">
<a href="[...]" target="_blank">[...]</a>
<noscript><a href="[...]del.php?id=1"></noscript>
<img src="imgs/del.gif" onClick="javascript:del(1);" border="0">
<noscript></a></noscript>
<br />
http://www.adresse.xyz
</div>

...

function del(delID)
{
// linkzahl korrigieren
var numLinks = document.getElementById("dynNumLinks").firstChild.nodeValue - 1;
document.getElementById("dynNumLinks").firstChild.nodeValue = numLinks;
// zu ladende url
loadURL = "./jobs/ajax/delete.php?lid=" + delID;
// url async. aufrufen
reload(0, loadURL, 1);
// eintrag loeschen
document.getElementById(delID).parentNode.removeChild(document.getElementById(delID));
}



Also. In dem div befindet sich eine Grafik, die auf onClick reagiert und del() aufruft.
(Alternativ wird für nichtaktiviertes JS ein PHP-Script aufgerufen, aber das sollte nichts mit dem Problem zu tun haben.)

del() hat die Aufgabe, eine im Text angegeben Zahl zu korrigieren, eine Url asynchron zu laden und schließlich den div mit der übergebenen Id zu entfernen.

Wenn nun die Funktion zum ersten mal aufgerufen wird, funktioniert alles, bis auf das Entfernen des divs. Wird die Funktion nun ein zweites mal mit der selben Id aufgerufen (also einfach ein neuer Klick auf das noch vorhandene Bild), so wird der div entfernt.
Folgen jetzt weitere Aufrufe der Funktion mit anderen Ids funktioniert alles schon von Anfang an, ohne dass ein zweiter Aufruf nötig ist.
Folglich tritt das Problem nur beim ersten Aufruf auf.

Weis echt nicht woran das liegen könnte...sieht jemand den Fehler?

WL

PS: Wenn jemand den ganzen JS-Code braucht, melden.
PPS: Is n bissl unübersichtlich geworden, hoffe man kommt zurecht :)
bei Antwort benachrichtigen
xafford wlaner „Problem bei JS-Funktion: Wo ist der Fehler?“
Optionen

Stell das Ganze bitte mal als Seite online, da auch die Seitenstruktur nicht ganz unerheblich ist. Ansonsten, hast Du vielleicht vergessen, dass ein Node auch einen TextNode als Child hat automatisch, auch wenn kein Text enthalten ist? Zudem, es ist nicht standardkonform (und kann auch zu Problemen führen) eine ID mit einem numerischen Wert zu beginnen.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
wlaner xafford „Stell das Ganze bitte mal als Seite online, da auch die Seitenstruktur nicht...“
Optionen

Hi xafford.
Das ganze ist derzeit in meinem (sich noch in der Entwicklung befindenden) Projekt eingebunden.
HTML- und JS-Code.

Log dich einfach als Benutzer Test mit dem Passwort test ein. (Gilt natürlich für alle)

Der Aufruf der Funktion del erfolgt über die Grafik:

wlaner

Edit:
Was noch zu erwähnen ist:
Das ganze funktioniert beim ersten Aufruf vollständig, und zwar dann wenn der/das div gerade erst per JS erstellt wurde ("Neuen Link eintragen") und die Seite vom Benuter noch nicht neu geladen wurde.

bei Antwort benachrichtigen
xafford wlaner „Hi xafford. Das ganze ist derzeit in meinem sich noch in der Entwicklung...“
Optionen

Ich denke ich hab den Fehler gefunden. Die erste ID wird in zwei DIVs definiert im Quelltext, einmal steht sie in einem DIV mit der ID "newlinkarea" und dann nochmal darunter. Deswegen verschwindet zuerst das DIV, welches man nicht sieht (betrifft dann nur das erste).

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
wlaner xafford „Ich denke ich hab den Fehler gefunden. Die erste ID wird in zwei DIVs definiert...“
Optionen

Stimmt... hab ich anfangs absichtlich so reingebaut (da wurden die ids noch anders vergeben) und nach einer Änderung dann total vergessen. Habs jetzt korrigiert und es scheint zu funktionieren.

Vielen Dank, an dem Problem wär ich beinah verzweifelt ,-)

bei Antwort benachrichtigen
xafford wlaner „Stimmt... hab ich anfangs absichtlich so reingebaut da wurden die ids noch...“
Optionen

Noch ein Nachtrag, hatte ich vergessen zu schreiben:

Das mit dem entfernen des Links per JavaScript würd ich anderst machen. Du entfernst als erstesden Link und signalisierst dem Nutzer damit, dass diesgeklappt hat, dann sendest Du erst den Befehl an den Server. Eleganter wäre, wenn Du erst dieAnforderung an den Server sendest und dann anhand des Rückgabewertes vom Server entscheidest ob das Löschen geklappt hat und dann erst den Link entfernst wenn sicher ist, dass er auch auf dem Server gelöscht wurde.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
wlaner xafford „Noch ein Nachtrag, hatte ich vergessen zu schreiben: Das mit dem entfernen des...“
Optionen
bei Antwort benachrichtigen