Michi: Eventlistener funktioniert nicht im Firefox

Hallo,

bei folgendem Code funktioniert der Eventlistener im IE aber nicht im FF und ich komme nicht dahinter, warum:
 var wh;
 wh = document.createElement("IMG");
 wh.src = "pics/wh.gif";
 wh.id = whID;
 wh.alt = "Wiederherstellen";
 if (wh.attachEvent)  wh.attachEvent("onclick", wiederherstellen);
 if (wh.addEventListener) wh.addEventListener('click', wiederherstellen, false);
 var whs = wh.style;
 whs.clear = "left";
 whs.width = "16px";
 whs.margin = "0 0 0 5px";
 whs.styleFloat = "left";
 whs.cssFloat = "left";
 document.getElementById("blabla").insertBefore(wh, was);

Wenn ich im IE das Bild klicke wird die Funktion aufgerufen, im FF jedoch passiert gar nichts. Es werden auch keine Fehler geworfen.

Danke und Grüße

Michi

  1. Lieber Michi,

    ich erkenne keinen offensichtlichen Fehler.

    // IE-Syntax

    if (wh.attachEvent) wh.attachEvent("onclick", wiederherstellen);

    // Mozilla-Syntax

    if (wh.addEventListener) wh.addEventListener('click', wiederherstellen, false);

    Soweit alles klar...

    Wenn ich im IE das Bild klicke wird die Funktion aufgerufen, im FF jedoch passiert gar nichts. Es werden auch keine Fehler geworfen.

    Konntest Du mit einem testweisen alert unzweifelhaft feststellen, dass die Funktion "wiederherstellen" tatsächlich nicht aufgerufen wurde?

    Ich verwende inzwischen meine eigene Funktion zum Zuweisen von Eventhandlern:

    // Funktion zum Setzen eines Eventhandlers  
       addEvent : function (ev, obj, handle) {  
          if (document.body.addEventListener) {  
             obj.addEventListener(ev, handle, false);  
             obj.addEventListener(ev, handle, false);  
          } else {  
             obj.attachEvent("on" + ev, handle);  
             obj.attachEvent("on" + ev, handle);  
          }  
       },  
      
    // Funktion zum Löschen eines Eventhandlers  
       removeEvent : function (ev, obj, handle) {  
          if (document.body.removeEventListener) {  
             obj.removeEventListener(ev, handle, false);  
             obj.removeEventListener(ev, handle, false);  
          } else {  
             obj.detachEvent("on" + ev, handle);  
             obj.detachEvent("on" + ev, handle);  
          }  
       },
    

    Vielleicht hilft Dir das weiter?

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. Hallo,

      Konntest Du mit einem testweisen alert unzweifelhaft feststellen, dass die Funktion "wiederherstellen" tatsächlich nicht aufgerufen wurde?

      Ja. Wird definitiv nicht aufgerufen.

      Kann es evtl. sein, dass es irgendwie mit dem nachträglichen einhängen des Knotens, oder einem der Styles ein Problem gibt?

      Greets

      Michi

    2. Hi,

      if (document.body.addEventListener) {
               obj.addEventListener(ev, handle, false);
               obj.addEventListener(ev, handle, false);
            } else {
               obj.attachEvent("on" + ev, handle);
               obj.attachEvent("on" + ev, handle);
            }

      Doppelt hält besser? Oder warum machst Du jeweils zwei identische Aufrufe?

      obj.removeEventListener(ev, handle, false);
               obj.removeEventListener(ev, handle, false);

      s.o.

      obj.detachEvent("on" + ev, handle);
               obj.detachEvent("on" + ev, handle);

      s.o.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      Schreinerei Waechter
      O o ostern ...
      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Lieber Andreas,

        Doppelt hält besser? Oder warum machst Du jeweils zwei identische Aufrufe?

        das ist mir tatsächlich noch nie aufgefallen... Sehr seltsam!

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        1. Hallo Felix.

          Doppelt hält besser? Oder warum machst Du jeweils zwei identische Aufrufe?

          das ist mir tatsächlich noch nie aufgefallen... Sehr seltsam!

          Das heißt, du siehst im Alltag sowieso alles doppelt?

          Einen schönen Mittwoch noch.

          Gruß, Ashura

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
          [HTML Design Constraints: Logical Markup]
  2. Hallo,

    bei folgendem Code funktioniert der Eventlistener im IE aber nicht im FF und ich komme nicht dahinter, warum:
    var wh;
    wh = document.createElement("IMG");
    wh.src = "pics/wh.gif";
    wh.id = whID;

    ^wo kommt whID her?

    wh.alt = "Wiederherstellen";
    if (wh.attachEvent)  wh.attachEvent("onclick", wiederherstellen);
    if (wh.addEventListener) wh.addEventListener('click', wiederherstellen, false);
    var whs = wh.style;
    whs.clear = "left";
    whs.width = "16px";
    whs.margin = "0 0 0 5px";
    whs.styleFloat = "left";
    whs.cssFloat = "left";
    document.getElementById("blabla").insertBefore(wh, was);

    ^ wo kommt was her?

    Wenn ich im IE das Bild klicke wird die Funktion aufgerufen, im FF jedoch passiert gar nichts. Es werden auch keine Fehler geworfen.

    Bei mir funktioniert ein einfacher Test mit beiden Browsern.

    Du kannst aber auch einfach

    wh.onclick = wiederherstellen;

    schreiben. Das sollte in allen Browsern funktionieren.

    viele Grüße

    Axel

  3. var wh;
    wh = document.createElement("IMG");
    wh.src = "pics/wh.gif";
    wh.id = whID;
    wh.alt = "Wiederherstellen";
    if (wh.attachEvent)  wh.attachEvent("onclick", wiederherstellen);
    if (wh.addEventListener) wh.addEventListener('click', wiederherstellen, false);

    Wenn du dem klick Event nur eine Funktion zuweisen willst, reicht durchaus:
    wh.onclick = wiederherstellen;

    Das funktioniert dann auf jeden Fall in allen Browsern.

    whs.styleFloat = "left";
    whs.cssFloat = "left";

    Was ist das, kenn ich gar nicht?
    Was spricht gegen: whs.float = "left";

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. Hallo,

      whs.styleFloat = "left";
      whs.cssFloat = "left";

      Was ist das, kenn ich gar nicht?
      Was spricht gegen: whs.float = "left";

      Es spricht dagegen, dass es nicht existiert, siehe: http://de.selfhtml.org/javascript/objekte/style.htm#style_eigenschaften, im Gegensatz zu cssFloat und styleFloat für den IE.

      viele Grüße

      Axel

      1. Hi,

        whs.styleFloat = "left";
        whs.cssFloat = "left";

        Was ist das, kenn ich gar nicht?
        Was spricht gegen: whs.float = "left";
        Es spricht dagegen, dass es nicht existiert, siehe: http://de.selfhtml.org/javascript/objekte/style.htm#style_eigenschaften, im Gegensatz zu cssFloat und styleFloat für den IE.

        Und der Grund, warum es nicht existieren darf, ist hier nachzulesen: http://de.selfhtml.org/javascript/sprache/reserviert.htm

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.