2012-03-12 2 views
3

У меня есть DIV, расположенный над другими элементами на странице, и я хочу, чтобы он исчезал при нажатии где-то, но НЕ внутри этого абсолютного позиционного div (или одного из его дочерних элементов).let div исчезают, onClick «везде, но ...»

Я использую распространение событий jQuery ($ (document) .on (...)) для всех событий кликов на странице.

Я хотел бы иметь общее решение, а не белые или черные списки тегов, пожалуйста.

Я не ищу «прозрачный слой между абсолютным решением DIV и другим контентом», это было бы моим последним временным решением.

Thx

+0

Эта страница будет, вероятно, поможет: http://stackoverflow.com/questions/152975/how-to-detect-a-click-outside-an-element – Rondel

ответ

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

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 
}); 

EDIT - если вам также необходимо проверить для детей элементы, которые вы могли бы сделать, как этот

$(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

0

http://jsfiddle.net/khKb5/

jQuery:

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

Это работает также, если вы нажмете где-нибудь прямо на body.

Смежные вопросы