2012-09-19 52 views
1

Code如何停止在此場景中的「傳播」?

<div id="container"> 
    <div id="link">Link</div> 
</div>​ 

$('#link').click(function (e) { 
    console.log("link");     
}); 

$('#container').mousedown(function (e) { 
    console.log("container");     
}); 

我想的是,當我點擊#link,也不會觸發#container處理程序。試過stopPropagation()preventDefault(),但我認爲這是錯誤的接近?

+0

e.preventDefault()應該工作。 – Asciiom

+0

否:http://jsfiddle.net/pkhJQ/1/ – markzzz

+1

'mousedown'在點擊事件之前發生。 –

回答

2

mousedown處理火災click處理程序之前,因此你不能從click處理程序已經向上冒泡到父元素mousedown事件取消mousedown處理程序。

如果不修改其他處理程序,我只需在內部元素中添加一個mousedown處理程序即可停止mousedown事件傳播。

$('#link').click(function (e) { 
    console.log("link"); 
}).mousedown(function (e) { //stops the mousedown event propagation from reaching 
    e.stopPropagation(); //the parent element 
}); 

$('#container').mousedown(function (e) { 
    console.log("container"); 
}); 

Fiddle

如果能夠切換處理器處理同樣的事件(比如他們click),你就可以調用event.stopPropagation()從內部元素的處理程序,因爲我與mousedown處理程序做以上。

+1

乾淨而智能的解決方案,upvoted! – Nelson