2012-03-12 64 views
3

我得到了一個DIV絕對定位在頁面上的其他元素之上,我希望它在某處被點擊時消失,但不在該絕對定位的div內(或其子元素之一)。讓div消失,onClick「無處不在,但......」

我正在使用jQuery的事件傳播($(document).on(...))頁面上的所有點擊事件。

我想有一個通用的解決方案,而不是白名單或黑名單的標籤,班請。

我不是在尋找'在絕對DIV和其他內容之間放置一個透明圖層'的解決方案,那將是我最後一次重新解決的解決方法。

THX

+0

本頁面可能會有所幫助:http://stackoverflow.com/questions/152975/how-to-detect-a-click-outside-an-element – Rondel 2012-03-12 14:27:03

回答

0
$(document).on('click', function(e) { 
    if (!(e.target.id=='myID' || $(e.target).parents('#myID').length>0)) { 
     //do something 
    } 
}); 

FIDDLE

+0

獲勝者,因爲選擇父母()而不是最接近的(),請參閱http://jsperf.com/jquery-parents-vs-closest/2 – ezmilhouse 2012-03-12 15:13:23

3
$('html').click(function() { 
    //Hide whatever you want to hide 
}); 

$('#your_div').click(function(e){ 
    e.stopPropagation(); 
}); 

,你也可以嘗試this

1

你可以使用e.target檢查什麼已被點擊

$(document).on("click", "*", function(e) { 
    if(e.target.id !== 'yourdivid'){ 
     $('#yourdivid').hide(); 
    } 
    //Hide whatever you want to hide 
}); 

編輯 - 如果你還需要檢查孩子你可以做這樣的

$(document).on("click", "*", function(e) { 
    //check if the target is your div or a child of your div 
    if($(e.target).closest('div#yourdivid').length !== 1){ 
     $('#yourdivid').hide(); 
    } 
    //Hide whatever you want to hide 
}); 
+0

這不起作用如果你點擊正文,你必須點擊一個元素。 http://jsfiddle.net/khKb5/1/ – Alex 2012-03-12 14:31:47

0

http://jsfiddle.net/khKb5/

元素

jQuery:

$(document).on("click", function(e) { 
    if($(e.target).closest('#box').length != 1){ 
     $('#box').hide(); 
    } 
}); 

這也適用,如果你直接點擊body上的某個地方。