Ricky: DOM: Events dynamisch im IE

Hi,

habe ein Element mit createElement und apendChild und so weiter erstellt. Wenn ich dem Element dann mit folgender Funktion das Event dranhängen will, gehts nicht:

document.getElementById("sp" + i).ondblclick = function(e) {
  if(!e) {
    var e = window.event;
  }
  if(e.target) {
    var elem = e.target;
  }
  if(e.srcElement) {
    var elem = e.srcElement;
  }
  // und so weiter
}

alert(document.getElementById("sp" + i).ondblclick); // IE gibt hier sogar die korrekte Funktion aus, wieso wird sie nicht ausgeführt?!

Im DOM Inspektor fehlt die Funktion allerdings :(
Habe auch schon probiert, die Funktion auszulagern (sollte ich das eigentlich sowieso lieber machen?), ging aber auch nicht.

Woran liegts?
Danke!

  1. Hi,

    alert(document.getElementById("sp" + i).ondblclick); // IE gibt hier sogar die korrekte Funktion aus, wieso wird sie nicht ausgeführt?!

    hast Du andere Event-Handler versucht?

    Im DOM Inspektor fehlt die Funktion allerdings :(

    Bist Du sicher, das richtige Element erwischt zu haben?

    Habe auch schon probiert, die Funktion auszulagern (sollte ich das eigentlich sowieso lieber machen?),

    Nö, da sehe ich mehr Nach- als Vorteile drin.

    ging aber auch nicht.

    Fehlerbeschreibung? Analyseversuche?

    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. Hi,

      alert(document.getElementById("sp" + i).ondblclick); // IE gibt hier sogar die korrekte Funktion aus, wieso wird sie nicht ausgeführt?!

      hast Du andere Event-Handler versucht?

      Yo, onclick o.ä. geht genauso wenig. Hab schon ein bisschen damit rumgespielt. Ist eher ein Problem der Sorte "Im IE kannst du keine events an dynamisch erstellte Elemente hängen" oder so, als Beispiel jetzt. Vielleicht hat ja jemand Erfahrung mit so einem Problem.
      Es ist ja schon interessant, dass alert(document.getElementById("sp" + i).ondblclick); die Funktion anzeigt, sie IST also irgendwo gespeichert, nur der DOM tree wird nicht entsprechend aktualisiert oder so. So würde ich mir das jetzt mal erklären.

      Im DOM Inspektor fehlt die Funktion allerdings :(

      Bist Du sicher, das richtige Element erwischt zu haben?

      Bin mir ziemlich sicher, weils in FF funktioniert.

      Habe auch schon probiert, die Funktion auszulagern (sollte ich das eigentlich sowieso lieber machen?),

      Nö, da sehe ich mehr Nach- als Vorteile drin.

      Naja, ein Vorteil wäre, dass man im DOM Inspektor bei dem Eelement ein "ondblclick"-attribut sehen würde. Das sieht man im Moment nicht, auch in FF nicht. Es funktioniert in FF wie gesagt trotzdem einwandfrei.

      ging aber auch nicht.

      Fehlerbeschreibung? Analyseversuche?

      Sorry :/
      Also, ich hab auch versucht, dem Element mit createAttribute("ondblclick"); das Event aufzudrücken, nodeValue dann zum Beispiel "testClick"
      und in der Funktion testClick(e) wäre dann die gleiche Funktion wie oben.
      Wie gesagt, das ging im IE nicht, in FF schon.
      Auch das e als Parameter ist nicht der Grund.

      Cheatah

      Yo, Danke erstmal!

      1. hi,

        Ist eher ein Problem der Sorte "Im IE kannst du keine events an dynamisch erstellte Elemente hängen" oder so, als Beispiel jetzt. Vielleicht hat ja jemand Erfahrung mit so einem Problem.

        Nein, nur damit, dass das im IE eigentlich problemlos "funzt".

        Wir haben hier also eher ein "die vorliegende Problembeschreibung macht das Problem nicht nachvollziehbar"-Problem.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Wir haben hier also eher ein "die vorliegende Problembeschreibung macht das Problem nicht nachvollziehbar"-Problem.

          Tjoa, dann sag mir doch mal, was du wissen müsstest, um so ein Problem zu lösen.

          Wir haben:
           - Ein dynamisch erstelltes Element
           - Einen event handler, der da, verzeihung, rangepappt werden soll
             (mit document.getElementById("sp" + i).ondblclick = function(e) { })
           - Im IE gehts nicht
           - wenn ich mir document.getElementById("sp" + i).ondblclick ausgeben lasse, steht die Funktion da, wenn ich aber auf das Element doppelklicke, passiert nichts (im IE). Das wundert mich am meisten.

          Gruß,
          Ricky

          1. hi,

            Tjoa, dann sag mir doch mal, was du wissen müsstest, um so ein Problem zu lösen.

            Ein auf's wesentliche reduziertes Online-Beispiel ist oftmals hilfreich.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
          2. Hi,

            • wenn ich mir document.getElementById("sp" + i).ondblclick ausgeben lasse, steht die Funktion da, wenn ich aber auf das Element doppelklicke, passiert nichts (im IE). Das wundert mich am meisten.

            was passiert, wenn Du die angehängte Funktion "per JavaScript-Code manuell" aufrufst?

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

        Daniel hat mich gerade darauf hingewiesen:
        im DOM Inspektor sollte gar kein ondblclick-Attribut zu sehen sein, weils kein Attribut ist.
        Mein Fehler.

        Ricky

  2. Hallo,

    Im DOM Inspektor fehlt die Funktion allerdings :(

    In welcher Ansicht? In der DOM-Nodes-Ansicht zeigt er dir nur DOM-Knoten an und Eventhandler sind ja keine Attribute.

    Wechsle in die JavaScript-Object-Ansicht und suche den Eventhandler.

    mfg. Daniel

    1. Hallo,

      Im DOM Inspektor fehlt die Funktion allerdings :(

      In welcher Ansicht? In der DOM-Nodes-Ansicht zeigt er dir nur DOM-Knoten an und Eventhandler sind ja keine Attribute.

      Yo, das ist wohl ein Fehler meinerseits. Ein Eventhandler /kann/ ein Attribut sein, aber in diesem Fall ist er es natürlich nicht. Haste Recht.

      Wechsle in die JavaScript-Object-Ansicht und suche den Eventhandler.

      Wie geht das? Habe IE7 mit Developer Toolbar. Sehe hier keine JS-Object Ansicht :(

      mfg. Daniel

      Danke!

      1. Hallo,

        In der DOM-Nodes-Ansicht zeigt er dir nur DOM-Knoten an und Eventhandler sind ja keine Attribute.

        Ein Eventhandler /kann/ ein Attribut sein

        Ich würde es anders ausdrücken: In HTML kann man Event-Handler aus Attributen erzeugen lassen. Letztlich wandelt sie der Browser in Funktionen um, die er an das jeweilige Element hängt.

        Wechsle in die JavaScript-Object-Ansicht und suche den Eventhandler.

        Wie geht das? Habe IE7 mit Developer Toolbar.

        Was der hat auch einen DOM-Inspector?!

        Sehe hier keine JS-Object Ansicht :(

        Ich dachte du meintest den DOM-Inspector im Firefox. Dort ginge das so:

        • Links in der normalen Ansicht das Element auswählen
        • Rechts auf das Fenster-Symbol klicken und im aufklappenden Dropdown-Menü „Javascript Object“ auswählen.
        • „Subject“ öffnen (also das eine Element, das dort angezeigt wird)
        • Event-Handler suchen

        Wie das im IE geht, weiß ich nicht, aber vielleicht ist der DI dort ähnlich aufgebaut.

        mfg. Daniel

        1. hi,

          Wie geht das? Habe IE7 mit Developer Toolbar.

          Was der hat auch einen DOM-Inspector?!

          http://www.heise.de/newsticker/meldung/89622

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Moin

    habe ein Element mit createElement ... erstellt.

    damit hast du doch schon eine Referenz auf das Element, wozu schaffst du dir mit

    document.getElementById("sp" + i)

    umständlich eine neue?

    Gruß
    rfb

    --
    Man kann einen Menschen nichts lehren, man kann ihm nur helfen, es selbst zu entdecken.
    (Galileo Galilei)
  4. habe ein Element mit createElement und apendChild und so weiter erstellt. Wenn ich dem Element dann mit folgender Funktion das Event dranhängen will, gehts nicht:

    document.getElementById("sp" + i).ondblclick = function(e) {

    Wenn du ein Element mit createElement erstellt hast, wozu dann hier getElementById()? Der Rückgabewert von createElement ist bereits das Objekt.
    Bei mir funktionert das ganze ohne Probleme.

    Wie lautet eigentlich die Fehlermeldung?

    if(!e) {
        var e = window.event;
      }

    das var ist hier unnötig, da du e ja schon deklariert hast als Parameter
    if(!e) e = window.event;

    if(e.target) {
        var elem = e.target;
      }
      if(e.srcElement) {
        var elem = e.srcElement;
      }

    Das läßt sich auch massiv vereinfachen:

    var elem = e.target || e.srcElement;

    // und so weiter

    was passiert wenn du ein alert('klick'); hier einfügst?

    alert(document.getElementById("sp" + i).ondblclick); // IE gibt hier sogar die korrekte Funktion aus, wieso wird sie nicht ausgeführt?!

    Im Firefox auch.

    Woran liegts?

    k.A.

    Struppi.

    --
    Javascript ist toll (Perl auch!)