2009-07-13 166 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