您可以在事件對象上使用stopPropagation()方法。
它會阻止事件冒泡而不取消默認事件行爲。
$(document).ready(function() {
$("tr").click(function(){
alert("TR");
});
$("input").click(function(e){
alert("INPUT");
e.stopPropagation();
});
});
,因爲它似乎你正在使用.live(),而不是直接的事件綁定,則不能使用stopPropagation()。
首先,.live()
是合法代碼,已被棄用,這意味着它可以在任何未來的新版本中從庫中刪除。我不知道您正在使用哪個版本的jQuery,但您應該考慮移至最新版本(無論如何都會進行更優化),並使用.on()進行事件授權。
儘管如此,如果你不能升級你的jQuery庫,這可能是你的問題的解決方案。傳遞給所有事件處理程序的事件參數包含一個屬性target
,它引用從中啓動事件的元素。所以你可以做這樣的事情:
$("tr").live('click',function(e){
if (e.target.nodeName !== "INPUT") {
// if ($(e.target).is('input') === false) { // jquery style but maybe less efficient
alert("TR");
}
});
不是很優雅,但伎倆。這是一個example。
.live()
的問題在於事件綁定到文檔,以至於應用程序變得越複雜,您最終可能會因爲停止傳播而頭疼。
與此同時,我用.on()
(here)和一個使用.delegate()
(here)做了小提琴。
小提琴是添加一個問題一個偉大的事情,但也請張貼代碼中的問題了。這樣,人們可以幫助你,如果jsFiddle脫機,這個問題也將在未來有用。 – 2012-01-10 12:49:12
我使用live(),而不是點擊() – user954740 2012-01-10 13:56:10
你可以使用'live()'發佈你的代碼。順便說一句,不要使用現場 - 它很慢,並已被棄用。 – 2012-01-10 13:58:41