2013-07-03 51 views
5

我試圖讓點擊事件觸發如果文檔被點擊,除非有一個點擊div我有一個特定的類名稱。jquery選擇器上的not()方法不起作用

我試過以下,但事件不會觸發。

$(document).not(".class").click(function(){ 
     //code 
}); 

$(document).not("div.class").click(function(){ 
     //code 
}); 

$("body").not(".class").click(function(){ 
     //code 
}); 

任何人都知道我在做什麼錯了?

感謝

*更新

我已經試過以下

$(document).on("click", ":not(.class)", function(){ 

$('*:not(.class)',document).click(function(){ 

$(document).find(':not(.class)').click(function(){ 

$("body:not(.thisclass)").doAction(); 

但它不給任何區別到div與我試圖排除的.class。任何點擊文檔都會觸發事件。

下面是從我的html

<div class="pictureBox" id="pictureBox2"> <!--content--></div> 

回答

8

您將點擊處理程序附加到document本身,因此它總是會觸發(除非其他處理程序阻止它)。

你應該做的,而不是爲使用delegated形式的.on

$(document).on("click", ":not(.class)", function(){ 
     //code 
}); 

這仍然重視對document事件處理程序,但此處理程序只響應點擊其源:not(.class)選擇匹配:該事件時, bubble updocument只有當源匹配選擇器時,jQuery纔會調用處理程序。

+0

+1。超級簡單的方式解釋代理/鼓泡與良好的網址資源。正確的如果我錯了,但另一種做法(不太漂亮)是讓$(document).click()'然後註冊$(':not(.class)')。click(function(e ){e.stopPropagation();});'。這將使'.class'冒泡本身停止,而不是冒泡到文檔。 – RaphaelDDL

+1

@RaphaelDDL應該工作,除非你不應該使用 - 你想要這個類,以防止文檔點擊。 – jcsanyi

+0

@jcsanyi真實的。我嘗試編輯但已經過去5分鐘了:P但是,正確的應該是'$('。class')。click(function(e){e.stopPropagation();});'。謝謝 – RaphaelDDL

1

的問題是,你的選擇會嘗試是要指定一個documentbodyclass不是class裏面元素,你可以嘗試這樣的股利:

$('*:not(.class)',document).click(function(){ 

或者:

$(document).find(':not(.class)').click(function(){ 
1

使用:not selector

$("body:not(#thisid)").doAction(); 

$("body:not(#thisid.thisclass)").doAction(); 

$("body:not(.thisclass)").doAction();