Ernesto: Eventhandler

Hallo,

ich habe in einem img-tag zwei Eventhandler notiert:
ondblclick und onclick:

<img src="bild.jpg" ondblclick="fct1();" onclick="fct2();" width="200"
  height="100" >

Es wird immer nur die Funktion für onclick: fct2() ausgeführt, obwohl ich
einen Doppelklick ausführe. Ist das normal? Habe ich da etwas falsch
gemacht? Wie kann ich zwei unterschiedliche Funktionen für ein Image
installieren? Über welche Eventhandler?
Der Evenrthandler: onmouseover kann da nicht herhalten, weil, sobald ich
mit der Mouse über dem Bild bin, die entsprechende Funktion ausgeführt
wird, und ein Klick dann schon nicht mehr ausgeführt werden kann, weil
schon verzweigt wurde.

Vielen Dank und viele Grüße

Ernesto

  1. Lieber Ernesto,

    es stimmt, dass in einem solchen Falle "onclick" zuerst ausgeführt wird - im Grunde genommen sogar zweimal, denn ein Doppelclick ist ja eben ein _doppelter_ Klick! Anscheinend sind aber die Browser so intelligent, dass sie einen Doppelklick nicht als doppelten Klick im onclick-Event feuern, sondern sich mit dem ersten der beiden Klicks begnügen.

    Wenn Du zwei Funktionen hast, die sich gegenseitig in die Quere kommen, dann empfehle ich Dir mit window.setTimeout() zu arbeiten, sodass die eine Funktion "abwartet", bis klar ist, dass es sich eben nicht um einen Doppelklick gehandelt hat.

    ungetestetes Beispiel:

    var KlickMeister {  
        dblclicked : false, // hier steht später eventuell true  
      
        fct1 : function (v) {  
            // Doppelklick!  
            KlickMeister.dblclicked = true; // Doppelklick eintragen!  
      
            // ab hier normaler Funktionscode...  
            alert("Doppelklick!");  
      
            // Doppelklick austragen, damit einfache Klicks wieder möglich sind!  
            window.setTimeout(function () {  
                KlickMeister.dblcklicked = false;  
            }, 120);  
      
            return true;  
        },  
      
        fct2 : function (v) {  
            // Einfacher Klick (oder doch Doppelklick?)  
            window.setTimeout(function () {  
                if (KlickMeister.dblclicked) {  
                    return false; // doch ein Doppelklick gewesen!  
                }  
      
                // Ab hier normaler Funktionscode für einfachen Klick...  
                alert("einfacher Klick")!  
      
                return true;  
            }, 120); // 120 Millisekunden genug für Doppelklick?  
        }  
    };
    

    <img src="..." alt="..." ondblclick="KlickMeister.fct1();" onclick="KlickMeister.fct2();" />

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Zu dem Thema bin ich aber auch der grundlegenden Meinung das man sich zu clickevents so oder so hinreichend informieren muss, sonst kommen einem früher oder später auf jeden fall die eigenheiten der browser in die Quere auf quirksmode.org wird das Thema gut dargestellt:
      http://www.quirksmode.org/js/events_mouse.html#click
      http://www.quirksmode.org/js/events_mouse.html#dblclick
      (alles Englisch)

      da steht dann auch so teffend:

      So keep your clicks and dblclicks well separated to avoid complications.

      1. auf quirksmode.org wird das Thema gut dargestellt:

        http://www.quirksmode.org/js/events_mouse.html#click
        http://www.quirksmode.org/js/events_mouse.html#dblclick
        (alles Englisch)

        da steht dann auch so teffend:

        So keep your clicks and dblclicks well separated to avoid complications.

        Hallo,

        Vielen Dank für die Links.
        Das sind sehr aufschlußreiche Informationen auf diesen Seiten.

        Viele Grüße

        Ernesto

    2. Hallo Felix,

      Vielen Dank. Ich werde es ausprobieren!   :-)

      Viele Grüße

      Ernesto