2012-10-18 38 views
4

here - 我希望在單擊任何地方但不在div上時發生警報。

當我點擊div時,警報也會顯示。

JS

$("html, body").not('.entry-content').click(function() {    
    alert('d');       
}); ​ 

HTML

<div class="entry-content"> kkkk </div>​ 
+0

它不起作用,因爲'.not('。entry-content')'不會停止冒泡到body和html節點的事件。 –

回答

17

您可以使用事件參數,看看到底點擊了哪個目標並返回false

$("html, body").click(function(e) { 
    if ($(e.target).hasClass('entry-content')) { 
     return false; 
    } 
    alert('d'); 
});​ 

http://jsfiddle.net/keyZw/

您正在使用的。不是()過濾器..但它仍然是你的html/body的一部分..所以你需要在click函數中處理它。你也只是結合的Click事件..

所以

// find html,body - not ones with class=entry-content - bind click 
$("html, body").not('.entry-content') 

所以這並不妨礙警覺的DIV還是身體

如前所述內..你只需要綁定到真身

$("body").click(function(e) { 
    if ($(e.target).hasClass('entry-content')) { 
     return false; 
    } 
    alert('d'); 
});​ 
+1

在你的函數中你有'e'參數,但是在你正在使用'event'的主體中;-) –

+0

@ZoltanToth謝謝..修正了它 –

+0

另外,不要'html,body'(沒有理由('click')' –

6
$("html *").click(function(e) { 
    if (e.target.className.indexOf("entry-content") < 0) { 
     alert('d'); 
    } 
}); 

DEMO


原始代碼不起作用,因爲.not()適用於它前面的選擇器 - htmlbody。他們倆有類的entry-content,使事件觸發

+0

但這並不能回答爲什麼代碼不工作.. –

+0

是的Rajat Singhal,我只是想問這個。 – Adarchy

+0

如果有一個以上的課程,這將不起作用。 – Archer

1

您也可以停止傳播點擊

的元素件

作品也可通過點擊一個子元素

<div class="entry-content">Element 
    <span>Sub element</span> 
</div>​ 

退房的Fiddle

0

的問題是,您要添加單擊事件的HTML和BODY標籤。所以,首先當你點擊身體區域時,你會得到2個警報。另外,由於事件傳播的方式,點擊相關的DIV會將click事件傳播到body和html。因此,您需要在點擊處理程序內部進行檢查以確定是否要顯示警報消息。

我修改了下面的jsfiddle,只在選擇器中包含HTML,並檢查處理程序中的entry-content類。

http://jsfiddle.net/m2eqS/6/

$("html").click(function(e) { 
    if(!$(e.target).hasClass("entry-content")){ 
     alert('TEST'); 
    }       
}); ​ 

結合HTML和身體之間的區別是,如果你希望能夠在任何地方點擊頁面上,下面的內容/體的結束位置,你應該使用HTML。否則使用BODY。