Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Capturing and Bubbling using jQuery

I am new to jQuery and I‘m trying to understand the concept of capturing and bubbling.

I have read a lot of articles, but most of them described event propagation for Javascript.

Lets assume we have the following HTML code:

<div id="outer">     outer     <div id="inner">         inner     </div> </div> 

Capturing is the phase where we go down the DOM elements and bubbling is when we go up.

In Javascript you can decide which way to follow (using true or false parameters):

element.addEventListener('click', doSomething, true) --> capture phase element.addEventListener('click', doSomething, false) --> bubble phase 

Is there anything similar for jQuery to denote which way to follow other than the JavaScript way?

Also does jQuery uses a default phase? For example bubble?

Because i used the following code to test this:

css

<style>     div {         border: 1px solid green;         width: 200px;     } </style> 

jQuery

<script>     $(document).ready(function(){         $('div').click(function(){             $(this).animate({'width':'+=10px'},{duration: 3000})         });     }); </script> 

It appears that when I click on the outer div, only that div animates to a larger div. When I click to the inner div both divs animate to larger divs.

I don’t know if I am wrong, but this test shows that the default browser propagation method is bubble.

Please correct me if I’m wrong.

like image 252
christostsang Avatar asked Jul 05 '14 10:07

christostsang


People also ask

What is bubbling and capturing?

Event bubbling and capturing are two ways of event propagation in the HTML DOM API, when an event occurs in an element inside another element, and both elements have registered a handle for that event. The event propagation mode determines in which order the elements receive the event.

What is jquery bubbling?

Event bubbling directs an event to its intended target, and works like this: When an object (like a button) is clicked, an event is directed to the object. If an event handler is set for the object, the event handler is triggered. Then the event bubbles up (like a bubble in water) to the objects parent.

What is the use of event capturing?

Event capturing is useful in event delegation when bubbling is not supported. For example: Some events, such as focus, don't bubble but can be captured. The inline handler on the target element triggers before capture handlers for the target element.


2 Answers

jQuery only uses event bubbling. If you want to add an event handler that uses the capturing model, you have to do it explicitly using addEventListener, with the third argument true as you show in the question.

like image 101
Barmar Avatar answered Sep 20 '22 18:09

Barmar


Event bubbling which will start executing from the innermost element to the outermost element.

Event Capturing which will start executing from the outer element to the innermost element.

But jQuery will use event bubbling. We can achieve event capturing with:

$("body")[0].addEventListener('click', callback, true); 

The 3rd parameter in the addEventListener which will tell the browser whether to take event bubbling or event capturing.

By default it is false.

If it is false then it will take event bubbling. If it is true then it will take event capturing.

like image 26
Vijay Ramesh Avatar answered Sep 22 '22 18:09

Vijay Ramesh