<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
的原因,但显然它不起作用
答案 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(...)。