Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Event Capturing vs Event Bubbling [duplicate]

Tags:

I just wanted to get the general consensus on which is a better mode of event delegation in JS between bubbling and capturing.

Now I understand that depending on a particular use-case, one might want to use capturing phase over bubbling or vice versa but I want to understand what delegation mode is preferred for most general cases and why (to me it seems bubbling mode).

Or to put it in other words, is there a reason behind W3C addEventListener implementation to favor the bubbling mode. [capturing is initiated only when you specify the 3rd parameter and its true. However, you can forget that 3rd param and bubbling mode is kicked in]

I looked up the JQuery's bind function to get an answer to my question and it seems it doesn't even support events in capture phase (it seems to me because of IE not support capturing mode).

So looks like bubbling mode is the default choice but why?

like image 509
Rajat Avatar asked Apr 18 '10 05:04

Rajat


Video Answer


2 Answers

In the past it was a platform issue, Internet Explorer had a bubbling model, and Netscape was more about capturing (yet supported both).

The W3C model calls for you be able to choose which one you want.

I think bubbling is more popular because, as stated there are some platforms that only support bubbling...and it sort of makes sense as a "default" mode.

Which one you choose is largely a product of what you are doing and what makes sense to you.

like image 64
MisterMister Avatar answered Sep 21 '22 19:09

MisterMister


While reading JavaScript: The Definitive Guide, 5th Edition, I came across Example 17-4 on page 422 that defines a function for dragging absolutely positioned elements. In the example, the function drag() is called in the onmousedown attribute of a document element. The function repositions the element based on the change in location of the mouse which is queried by handlers added to the root document element for captured mousemove and mouseup events. They capture these events on the document for the following reason:

It is important to note that the mousemove and mouseup handlers are registered as capturing event handlers because the user may move the mouse faster than the document element can follow it, and some of these events occur outside the original target element.

This suggests an advantage in quicker response when capturing events.

like image 40
Spencer Williams Avatar answered Sep 22 '22 19:09

Spencer Williams