Christian S.: Eventhandler an dynamisch erzeugte Elemente anhängen

Hi,

habe ein kleines JavaScript Problem:

ich erzeuge mir ein Objekt mit DOM:

var obj = document.createElement("div");

nun möchte ich einen Eventhandler an dieses Objekt hängen, wie ich es sonst auch mache:

obj.onmousedown = myfunction;

das geht allerdings nicht...

habe folgendes probiert:

obj.setAttribute("onmousedown", "myfunction()");

das geht zwar, ist aber auch schlecht, da die Funktion die ich aufrufen will, eine private Methode einer Klasse ist. und ich da ja nicht so einfach rankomme...

mein Code sieht etwa so aus:

function Popup()
{
   var init = function()
   {
     // objekt dynmisch erzeugen
     // event an das objekt hängen (geht nicht)

var anderesObjekt = document.getElementById("beispiel");
     anderesObjekt.onclick = test; // das geht!
   };

var myfunction = function()
   {

};

var test = function()
   {

};

init();
}

var popup = new Popup();

Jemand ein Idee??

  1. Hallo,

    var obj = document.createElement("div");

    nun möchte ich einen Eventhandler an dieses Objekt hängen, wie ich es sonst auch mache:

    obj.onmousedown = myfunction;

    das geht allerdings nicht...

    Das sollte aber problemlos funktionieren - wenn myfunction in dem Kontext, wo du diese Zuweisung notierst, verfügbar ist. Was bedeutet »geht nicht« konkret? Bekommst du eine Fehlermeldung? Wird die Handlerfunktion einfach nicht aufgerufen?

    Mathias

    1. Hi,

      Wird die Handlerfunktion einfach nicht aufgerufen?

      Ja genau.

      Ich habe aber das Problem lokalisiert:

      mein Code:

      var popup = document.getElementById(id);
      var popupContent = popup.innerHTML;

      var dragPanel = document.createElement("div");
        dragPanel.appendChild(document.createTextNode("DragPanel"));
      dragPanel.onclick = function(){alert("te");};
      popup.appendChild(dragPanel);

      popup.innerHTML += popupContent;

      So gehts nicht...

      Kommentiere ich die letzte Zeile (
      popup.innerHTML += popupContent;) aus, dann gehts...

      Ich wollte halt das DragPanel als erstes Child in das popup hängen... dazu merke ich mir erst den Inhalt, hänge es an und appende mit += den Inhalt wieder...

      Kann einer das erklären?

      Gruß!

      1. Yerf!

        popup.innerHTML += popupContent;

        Kann einer das erklären?

        Lass dir mal den Inhalt von innerHTML anzeigen, ob dort ein onclick-Attribut auftaucht (ich schätze nein). Durch die Zuweisung auf innerHTML werden wohl *alle* Childs neu gebaut, womit deine frühere Zuweisung des Event-Handlers verloren geht.

        Gruß,

        Harlequin