onkel joe: onclick Attribut bzw. Event ändern -- Problem mit IE

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

  1. 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ängen

    Der 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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

      1. 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

        1. JAAAA Herrgott das hat mein Problem gelöst!!!
          Spitzenmäßig.
          Den anderen Post kannst Du vergessen.
          Tausend Dank....

          Gruß Onkel Joe

  2. 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

    1. 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