如何阻止事件传播?

时间:2010-01-15 08:41:43

标签: jquery events

<script type="text/javascript">
$(function(){
    $('<h2>Click</h2>').prependTo($('#container')).live('click',function() {
        return false;
    });
    $('#container').click(function() {
        alert(1);
    });
});
</script>


<div id="container">

</div>

我不希望click事件传播到#container,这就是return false的原因,但显然它不起作用

4 个答案:

答案 0 :(得分:3)

它与使用live选择器和事件委派有关。你甚至不需要那个live处理程序。像这样更改#container点击:

$('<h2>Click</h2>').prependTo($('#container'));
$("#container").click(function(e){
    if(e.target.nodeName != "H2"){
       alert(1);
    }
});

或者如果使用所有jQuery看起来更好:

$("#container").click(function(e){
    if($(e.target).is('h2') == false){
       alert(1);
    }
});

这两个示例都会测试原始点击发生的位置,如果单击H2则不会执行。

答案 1 :(得分:1)

您正在做的事情不需要live - 请改为使用bind(或直接click):

$('<h2>Click</h2>').prependTo($('#container')).click (function() {
    return false;
});

如果你真的想要对h2进行实时绑定,你应该致电:

$('h2').live ('click', function () { ... });

答案 2 :(得分:0)

将参数用于事件处理程序。该参数将绑定到事件对象:

$('<h2>Click</h2>').prependTo($('#container')).live('click',function(e) {
    e.stopPropagation();
    return false;
});

答案 3 :(得分:0)

live不能用于像这样的jquery对象。

引自Events/live

  

直播活动目前仅适用于   用于对选择器。例如,   这样可行:$(“li a”)。live(...)   但这不会:$(“a”,   someElement)。生活(...),两者都没有   这是:$(“a”)。parent()。live(...)。