Danfix: Eventhandler dynamisch verändern

Salut!

Ist es möglich per Javascript nachträglich einen Eventhandler
hinzuzufügen?
D.h. meine HTML-Seite wird serverseitig generiert, allerdings
ohne Eventhandler! Diese will ich jetzt nachträgich einfügen.

Also ungefähr so:

document.getElementsByTagName('TD')[i].firstChild.setAttribute("onContextMenu","alert('OK');","false");

Das hab ich auch schon versucht:

document.getElementsByTagName('TD')[i].firstChild.onContextMenu = "alert('OK');";

Wenn ich mir dann mit alert mal das InnerHTML ausgeben lasse, steht
der Handler auch drin, nur funktionieren tut er nicht!
Warum? Und wie geht's richtig?

Danke!

  1. Hallo Danfix,

    document.getElementsByTagName('TD')[i].firstChild.onContextMenu = "alert('OK');";

    Wenn ich mir dann mit alert mal das InnerHTML ausgeben lasse, steht
    der Handler auch drin, nur funktionieren tut er nicht!
    Warum? Und wie geht's richtig?

    Hast du bedacht, dass je nach Browser dein FirstChild auch ein Textknoten (Umbruch im Quellcode) statt eines HTML-Elementes sein könnte?

    Gruß Gernot

  2. document.getElementsByTagName('TD')[i].firstChild.onContextMenu = "alert('OK');";

    JS ist case sensitive ausserdem erwartet eine Eventhandler eine Referenz auf eine Funktion, keinen String.

    probier mal ~~~javascript

    document.getElementsByTagName('TD')[i].oncontextmenu = function()
    {
    alert(this.innerHTML);
    }

      
    Struppi.
    
    -- 
    [Javascript ist toll](http://javascript.jstruebig.de/)
    
  3. Hallo Danfix,

    document.getElementsByTagName('TD')[i].firstChild.onContextMenu = "alert('OK');";

    Probier dies mal:

      
    document.getElementsByTagName('TD')[i].firstChild.oncontextmenu = function {alert('OK')};  
    
    

    Eventhandler müssen hier klein geschrieben werden, namentlich aufgerufene Funktionen vertragen dabei auch meines Wissens keine Übergabeparameter.

    Gruß Gernot

    1. Eventhandler müssen hier klein geschrieben werden, namentlich aufgerufene Funktionen vertragen dabei auch meines Wissens keine Übergabeparameter.

      Die Funktion wird nicht aufgerufen, sondern dem Handler die Referenz zugewiesen. In JS erhälst du eine Funktinsreferenz indem du die Klammer weggeläßt (die übrigens bei deinem Beispiel fehlt)

      Struppi.

      1. Hallo Struppi,

        Die Funktion wird nicht aufgerufen, sondern dem Handler die Referenz zugewiesen. In JS erhälst du eine Funktinsreferenz indem du die Klammer weggeläßt (die übrigens bei deinem Beispiel fehlt)

        Ich war gerade dabei mich selbst zu korrigeiren, danke!

        Du bist zu schnell für mich! ;-)

        Gruß Gernot

  4. Erstmal dankeschön!

    Jetzt geht'er ;-)