Don P: Event-Capturing

Hallo,

Mal zwei Verständnisfragen zum Event-Capuring:

Ein Event ist ja immer auf ein sog. target, d.h. ein Zielelement gerichtet, und pflanzt sich von dort im DOM-Baum bis zum Wurzelelement fort (bubbling), falls er nicht unterwegs aufgehalten wird (stopPropagation/cancelBubble).

  1. Wie ist es dann aber in der sog. capuring phase? Stimmt das so: Ein Event steigt immer zuerst vom Wurzelelement zum Zielelement ab, so dass z.B. ein onclick-Handler für die capuring phase im document immer als erster zum Zug kommt, egal wohin man klickt?

  2. Wenn ja: Kann man bereits beim "feuern" eines Events angeben, dass er gar nicht erst absteigen soll? Ich meine, wenn ich nur bubbling will, ist eine capturing phase doch unnötig und frisst evtl. nur Performance...

Danke und Gruß,
Don P

  1. Mal zwei Verständnisfragen zum Event-Capuring:

    Literatur
    http://www.quirksmode.org/js/events_order.html
    MSIE sagt bubbling,
    Netscape sagt capturing
    W3C sagt: sowohl als auch!

    Die Sache ist, dass du bei addEventListener ja pro Element angibst, ob nun an diesem Element während der capturing oder bubbling Phase deine dem Event zugeordnete Funktion ausgelöst wird.
    Erachte aber zwei Elemente, ein Parent und ein Kind davon, und beide haben den gleichen Event regsitriert.
    Deshalb müssen beide Phasen durchlaufen werden.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Hallo,

      Literatur
      http://www.quirksmode.org/js/events_order.html
      MSIE sagt bubbling,
      Netscape sagt capturing
      W3C sagt: sowohl als auch!

      Ah super. Der Artikel ist gut. Da bleiben keine Fragen offen :)

      Danke, Don P

      1. Literatur
        http://www.quirksmode.org/js/events_order.html
        MSIE sagt bubbling,
        Netscape sagt capturing
        W3C sagt: sowohl als auch!

        Ah super. Der Artikel ist gut. Da bleiben keine Fragen offen :)

        Es freut mich, dass Links auch angenommen werden.
        Natürlich kann man nur die Bubbling-Phase canceln, nicht aber die Capturing Phase.

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. http://www.quirksmode.org/js/events_order.html
          Natürlich kann man nur die Bubbling-Phase canceln, nicht aber die Capturing Phase.

          Auch wenn das dort steht, es ist falsch.

          <!doctype html>  
          <script>  
          [code lang=javascript]window.onload = function () {  
          	document.addEventListener('click', documentClicked, true);  
          	document.getElementById('a').addEventListener('click', aClicked, false);  
          	  
          	function documentClicked (e) {  
          		e.stopPropagation();  
          	}  
          	  
          	function aClicked (e) {  
          		alert('a clicked');  
          	}  
          };
          

          </script>
          <p id="a">aaa</p>[/code]

          Das geht in allen Browsern, die W3C DOM Events unterstützen (einschließlich IE9 Beta).

          Mathias

          1. Hallo,

            Das geht in allen Browsern, die W3C DOM Events unterstützen (einschließlich IE9 Beta).

            Das klingt gut. Dann kann man Events für viele children ggf. schon im Elternelement abfangen :).

            Gruß, Don P

  2. Ein Event steigt immer zuerst vom Wurzelelement zum Zielelement ab, so dass z.B. ein onclick-Handler für die capuring phase im document immer als erster zum Zug kommt, egal wohin man klickt?

    Richtig.

    1. Wenn ja: Kann man bereits beim "feuern" eines Events angeben, dass er gar nicht erst absteigen soll?

    Ja, mit eventObjekt.stopPropagation().