解決方法1:用currentTarget當前比較目標:
$("#parentEle").click(function(e) {
if(e.target == e.currentTarget) {
alert('parent ele clicked');
} else {
//you could exclude this else block to have it do nothing within this listener
alert('child ele clicked');
}
});
Fiddle
e.target
將啓動該事件的元素。
e.currentTarget
將會是它現在的位置(冒泡),在這個點擊事件中將會是parentEle
,因爲這就是它正在監聽的內容。
如果它們相同,則您知道點擊是直接在父級上的。
解決方案2:停止傳播事件擊中parentEle前:
另一種選擇是,以防止事件在第一時間冒泡,如果有一個子元素上的點擊。這是可以做到這樣的:
$("#parentEle").click(function(e) {
alert('parent ele clicked');
});
$("#parentEle").children().click(function(e) {
//this prevent the event from bubbling to any event higher than the direct children
e.stopPropagation();
});
Fiddle
兩者之間的主要區別在於,第一個解決方案會忽略這個偵聽器的事件,並允許它繼續向上冒泡。如果您有需要獲得該活動的此parentEle
的家長,這可能是必需的。
第二種解決方案阻止任何點擊事件冒泡過去parentEle
的直接子女。因此,如果在parentEle
的父級上發生了點擊事件,他們也不會看到這些事件。
停止傳播! – adeneo
@ adeneo謝謝! – Narong