What is event bubbling and capturing

http://stackoverflow.com/questions/4616694/what-is-event-bubbling-and-capturing

http://www.quirksmode.org/js/events_order.html#

http://javascript.info/tutorial/bubbling-and-capturing#

http://bitovi.com/blog/2010/10/a-crash-course-in-how-dom-events-work.html#




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.

With bubbling, the event is first captured and handled by the innermost element and then propagated to outer elements.

With capturing, the event is first captured by the outermost element and propagated to the inner elements.

Capturing is also called "trickling", which helps remember the propagation order:

bubble up, trickle down

Back in the old days, Netscape advocated event capturing, while Microsoft promoted event bubbling. Both are part of the W3C Document Object Model Events standard (2000).

IE < 9 uses only event bubbling, whereas IE9+ and all major browsers support both.

We can use the addEventListener(type, listener, useCapture) to register event handlers for in either bubbling (default) or capturing mode. To use the capturing model pass the third argument as true.

Only the bubbling model is supported by all major browsers. If you are going to use event capturing anyway, you need to handle event bubbling for IE. This makes it event bubbling easier to use, in that it provides wider browser compatibility. On the other hand, the performance of event bubbling may be slightly lower for complex DOMs.

Example

<div>
    <ul>
        <li></li>
    </ul></div>

In the structure above, assume that a click event occurred in the li element.

In capturing model, the event will be handled by the div first (click event handlers in the div will fire first), then in the ul, then at the last in the target element, li.

In the bubbling model, the opposite will happen: the event will be first handled by the li, then by the ul, and at last by the div element.

For more information, see

In the example below, if you click on any of the highlighted elements, you can see that the capturing phase of the event propagation flow occurs first, followed by the bubbling phase.


var divs = document.getElementsByTagName('div');function capture() {
    log('capture: ' + this.firstChild.nodeValue.trim())
}function bubble() {
    log('bubble: ' + this.firstChild.nodeValue.trim())
}for (var i = 0; i < divs.length; i++) {
    divs[i].addEventListener('click', capture, true);
    divs[i].addEventListener('click', bubble, false);
}var $log = $('#log');function log(msg) {
    $log.append('<p>' + msg + '</p>');
}
div {    border: 1px solid red;    padding: 5px;    min-height: 10px; }
<script src="http://code.jquery.com/jquery.min.js"></script><div>1    <div>2        <div>3            <div>4                <div>5</div>            </div>        </div>    </div></div><section id="log"></section>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值