2010-08-31 62 views
4

示例代碼:我怎樣才能jQuery來忽略。點擊父母()

<div id="a"> 
    <div id="b"> 
      Click here 
    </div> 
</div> 

<script> 
    $('*').click(function() { 
     alert($(this).attr('id'));      
    }); 
</script> 

當你點擊「點擊這裏」它提醒兩次,一旦與「b」,然後用「 a'。

我需要弄清楚如何讓jQuery到忽略用戶點擊的所有父母,在這種情況下,只是提醒,'b'。

+0

我認爲你應該使用'$('#a')。委託('*','點擊',函數(){})'而不是將附加的點擊處理程序添加到''*''* *編輯:**,實際上*依靠*在事件冒泡:) – 2010-08-31 09:46:04

回答

1

嘗試使用$('body').delegate('*', 'click', fn)而不是直接事件處理程序。 (請參閱jQuery.delegate。)每個事件只會調用一次,並且您可以從事件對象中找出哪個元素受到影響。

+0

非常感謝! – 2010-08-31 23:35:19

14

試試這個:

$('*').click(function(e) { 
     e.stopPropagation(); 
     // do something 
    }); 

在這裏你可以找到文檔:http://api.jquery.com/event.stopPropagation/

+0

在此行後面放置提醒: 'e.stopPagagation();' – 2010-08-31 06:43:51

1

您正在使用的 「所有選擇」 http://api.jquery.com/all-selector/

我認爲你正在尋找這樣的:

$('#b').click(function() { 
    alert($(this).attr('id')); 
}); 
+0

不,我希望頁面上的所有內容都可點擊,就像當你正在使用Firebug,並使用「單擊元素查看源代碼」功能。 – 2010-08-31 06:36:41

+0

這也可以,假設你的元素的'id'總是** b **。 – 2010-08-31 06:48:11

1

使用stopPropagation

$('*').click(function(event) { 
    alert($(this).attr('id')); 
    event.stopPropagation(); 
}); 
+0

非常適合.click() - 似乎不適用於.hover() - 是否有辦法做到懸停以及? – 2010-08-31 06:40:40