2009-07-18 37 views

回答

6

我知道你已經接受了上面的答案,但我會建議強烈反對。 你可以使用事件委託來完成你想要的任務,並且使dom的開銷減少很多。

我知道.live()存在,但太多活動處理程序也會影響性能。我更喜歡活動代表團的舊風格。

演示here

$(function(){ 
    $('body').click(clickFn); 
    }); 

    function clickFn(ev) { 

    if (ev.target.id != 'button1'){ 
     //do your stuff 
     console.log('not a #button1 click'); 
    } 

    } 
7

您可以使用:not selector

$('button:not(#button1)').click(function(){ 
    //Do something 
}); 

以上選擇將匹配所有的按鈕元素,除了一個id爲「BUTTON1」。

如果你真的要選擇所有的body標籤下的元素,你可以使用"All"*)選擇,也與:not(selector).not(expr)排除元素:

$('body *:not(#button1)').click(function(){ 
    //Do something 
}); 

或者

$('body *').not('#button1').click(function(){ 
    //Do something 
}); 

如果這樣做,您可能會遇到一些事件冒泡或傳播問題,您可以使用event.stopPropagation函數處理此問題。

+0

偉大的答案。謝謝。 – 2009-07-18 06:32:59

+0

不客氣! – CMS 2009-07-18 06:34:01

+3

不是一個好的解決方案。您最終可能會附加100次點擊事件。事件代表團最好在這裏檢查event.target – redsquare 2009-07-18 07:41:58

1

當前的CSS 3選擇器候選建議書定義了:root pseuedo class

:root僞類代表一個元素,它是文檔的根。在HTML 4中,這始終是HTML元素。

您可以將一個事件偵聽器附加到根,然後檢查哪個元素收到了點擊。如果這是你想忽略回報的元素,否則做你想做的事情。

相關問題