开发者

event.stopPropagation stops propagation of live events, although it should not

The documentation for says that event.stopPropagation shouldn't stop propagation of live events (http://api.jquery.com/event.stopPropagation). However it works just the opposite for me. Try this: http://jsfiddle.net/PSYg8. Clicking on the red Div should fire the live event attached to开发者_如何学C the html element.


What the documentation is telling you is that it is not possible to call stopPropagation from a live handler.

Because jQuery implements live events by listening to all events that propagate up to the <html> element and then seeing if the firing element matches your original selector, stopping propagation from a regular event handler on an element prevents the event from ever reaching the live handler.

Edit: If you're not clear on how DOM events and event propagation works, QuirksMode has a wonderful analysis of the capturing and bubbling models, and Microsoft has a great page that lets you visualize how event propagation works in the W3C, classic, and IE models.


You're swapping the items. Inside .live, you cannot use stopPropagation. So for example this does generate two alerts: http://jsfiddle.net/PSYg8/1/.

$(document).ready(function(){
    $('html').live('click', function(){
        alert('html');
        event.stopPropagation();
    });

    $('div').click(function(event){
        alert('div');
    });
});

Inside .click (.bind), stopPropagation works seamlessly. It just stops the div event from bubbling up to the html element.


Since the .live() method handles events once they have propagated to the top of the document, it is not possible to stop propagation of live events

Meaning

$('html').live('click', function(e){
    e.stopPropagation(); // does nothing
    alert('html');
});

You misinterpreted the documentation. When you stop propagation on the click event it does not bubble upto the live event.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜