onclick Attribut bzw. Event ändern -- Problem mit IE
onkel joe
- javascript
Hallo Leute,
ich würde gerne das onclick-Attribut bzw. Event eines Textlinks neu setzen.
Im Firefox bzw. Gecko-basierenden Browsern funktioniert auch folgendes:
cm_link=document.getElementById("link");
cm_link.removeAttributeNode(cm_link.getAttributeNode("onclick"));
onclick = document.createAttribute("onclick"); //Attr. erstellen
onclick.nodeValue="close_comments()"; //neue Fkt. zuordnen
cm_link.setAttributeNode(onclick); //neues Attr. anhängen
Der InternetExplorer hustet mir was. Bzw. nix. Keine Fehlermeldung, aber auch keine Änderung des onclick Attributes.
Was mache ich falsch? Oder geht es einfach nicht im IE? Ich bin für jede konstruktive Antwort dankbar.
Gruß Onkel Joe
Hi,
ich würde gerne das onclick-Attribut bzw. Event eines Textlinks neu setzen.
entscheide Dich: onclick-Attribut oder Handler eines click-Events?
Im Firefox bzw. Gecko-basierenden Browsern funktioniert auch folgendes:
Geckos wandeln dies jederzeit korrekt um, der IE nur manchmal (nämlich wenn's von Anfang an im Dokument stand).
onclick = document.createAttribute("onclick"); //Attr. erstellen
onclick.nodeValue="close_comments()"; //neue Fkt. zuordnen
cm_link.setAttributeNode(onclick); //neues Attr. anhängenDer InternetExplorer hustet mir was. Bzw. nix. Keine Fehlermeldung, aber auch keine Änderung des onclick Attributes.
Was sagt Dir ein cm_link.getAttribute('onclick')?
Was mache ich falsch? Oder geht es einfach nicht im IE? Ich bin für jede konstruktive Antwort dankbar.
Wenn Du den onclick-Handler setzen willst, so tue dies, anstatt eines Attributs zu erzeugen.
Cheatah
Jo Hallo und danke erstmal für die schnelle Antwort.
Ich hab jetzt mal den onclick-Handler neu gesetzt. Funktionieren tut das auch. Aber das Problem ist, dass der Handler sofort feuert. Also die Liste, die durch das alte Event zuvor geöffnet wurde, gleich wieder schließt.
Feuern sollte er eigentlich erst wenn man tatsächlich ein zweites mal auf den Text klickt.
Was macht man da???
Gruß Onkel Joe
Hallo,
Ich hab jetzt mal den onclick-Handler neu gesetzt. Funktionieren tut das auch. Aber das Problem ist, dass der Handler sofort feuert.
Wahrscheinlich hast du
element.onclick = handler();
statt
element.onclick = handler;
geschrieben.
Ersteres führt die Funktion handler aus und speichert ihren Rückgabewert (wahrscheinlich keiner, also undefined) in der onclick-Eigenschaft. Letzteres kopiert die Funktion nach onclick, so soll es sein.
Mathias
JAAAA Herrgott das hat mein Problem gelöst!!!
Spitzenmäßig.
Den anderen Post kannst Du vergessen.
Tausend Dank....
Gruß Onkel Joe
Hallo,
vergiss setAttributeNode, removeAttributeNode und auch setAttribute. Nutze nur folgende Schemata:
element.onclick = handlerfunktion; // Setzen
element.onclick = null; // Löschen
Das kann auch der IE.
Mathias
Hallo Mathias,
ja das will ich auch machen. Allerdings liegt das Problem darin, dass der Mouseklick, der die Funktion zur Handleränderung aufgerufen hat, immer noch im Eingabestrom ist.
D.h. wenn ich den Wert des Handlers neu setze, wird er sofort nochmal aktiv, weil der Mausklick also das Event noch "drin" ist.
Ich will aber, dass erst nachdem nocheinmal auf den Link geklickt wurde die Liste wieder geschlossen wird.
Wenn ich onclick erst auf null und dann neu setze bringt mir das leider auch nichts.
Kann man den Eingabestrom irgendwie in JavaScript löschen?
Gruß Onkel Joe