2009-07-13 128 views
22

我完全错过了这是应该做什么?我希望,如果我对一个事件调用stopPropagation(),该事件处理程序将不会被触发的祖先元素,但下面的例子不工作这种方式(在Firefox 3中至少)..jquery Event.stopPropagation()似乎不工作

<script type="text/javascript"> 
    $("input").live("click", function(event){ 
     console.log("input click handler called") 
     event.stopPropagation() 
    }); 

    $("body").live("click", function(event){ 
     console.log("body was click handler called. event.isPropagationStopped() returns: " + event.isPropagationStopped()); 
    }) 

</script> 

... 

<body> 
    <input type="text" > 
</body> 

回答

50

现场活动不遵循相同的事件冒泡规则。请参阅有关live event handling的文档。从上面参考

引用:

直播活动不要在传统 方式气泡,不能 停止使用stopPropagation或 stopImmediatePropagation。例如, 采取两个点击事件 - 一个绑定到“li”和另一个“li a”的情况。 如果点击发生在内部 锚点上,两个事件都将被触发。 这是因为当一个 $(“li”)。bind(“click”,fn);绑定 你实际上说“每当在LI元素上发生 点击事件 - 或LI元素内 - 触发此 点击事件。”要进一步停止 处理现场活动,fn必须 返回false。

+0

太棒了。非常感谢澄清。 – morgancodes 2009-07-14 15:31:19