2011-05-19 78 views
29

點擊jQuery中的元素會導致氣泡達到正文。如果我們有一個綁定到正文的點擊處理程序來顯示警報,那麼單擊任何元素都會觸發正文並觸發警報。我的問題是,有什麼方法可以知道身體警報是由於直接點擊正文而觸發的,還是由於氣泡直到身體而觸發的點擊。有什麼方法可以檢查泡沫是否觸發了點擊?

+1

不管你做什麼,要警惕stopPropagation的。這將打破所有'.live'調用。 – 2011-05-19 18:23:58

回答

51

比較event.targetthisthis始終是處理程序綁定的事件; event.target始終是事件發生的元素。

$(document.body).click(function(event) { 
    if (event.target == this) { 
     // event was triggered on the body 
    } 
}); 

在元素的您知道是一個文檔中是唯一的情況下(基本上,只是body)你也可以檢查nodeNamethis的:

$(document.body).click(function(event) { 
    if (event.target.nodeName.toLowerCase() === 'body') { 
     // event was triggered on the body 
    } 
}); 

你要做toLowerCase()因爲案件nodeName在瀏覽器中不一致。

最後一個選項是比較一個ID,如果你的元素有一個,因爲這些也必須是唯一的:

$('#foo').click(function(event) { 
    if (event.target.id === 'foo') { 
     // event was triggered on #foo 
    } 
}); 
+0

感謝您的解釋。 – Pinkie 2011-05-19 19:15:55

+0

男人,非常感謝! :) – 2015-02-05 18:27:51

5

你可以查閱一下與單擊event.target

$(something).click(function(e){ 
    alert(e.target) 
}) 
2

「事件」參數傳遞給處理程序有一個「目標」屬性,它是指是事件的直接目標的元素。您可以檢查該屬性以查看它是否爲<body>元素。

請注意,jQuery「.delegate()」工具可用於爲您檢查。

相關問題