Как я могу вызвать функцию, когда я нажимаю где угодно на моей странице, кроме одного div ( id=menu_content
)?
88
Вы можете подать заявление click
на body
документ и отменить click
обработку , если click
событие генерируется DIV с идентификатором menu_content
, Это будет связать событие с одного элементом и сохранение связывания click
с каждым элементом , за исключениеmenu_content
$('body').click(function(evt){
if(evt.target.id == "menu_content")
return;
//For descendants of menu_content being clicked, remove this check if you do not want to put constraint on descendants.
if($(evt.target).closest('#menu_content').length)
return;
//Do processing of click event here for every element except with id menu_content
});
closest
начинается с текущего элемента, он обрабатывает нажатиеmenu_content
, а также нажатие на потомков. Думаю, второеif
- это все, что тебе нужно.См. Документацию для jQuery Event Target . Используя свойство target объекта события, вы можете определить, где произошел щелчок внутри
#menu_content
элемента, и, если да, преждевременно завершить работу обработчика щелчка. Вам нужно будет использовать.closest()
для обработки случаев, когда щелчок произошел от потомка#menu_content
.$(document).click(function(e){ // Check if click was triggered on or within #menu_content if( $(e.target).closest("#menu_content").length > 0 ) { return false; } // Otherwise // trigger your click function });
источник
попробуй это
$('html').click(function() { //your stuf }); $('#menucontainer').click(function(event){ event.stopPropagation(); });
вы также можете использовать внешние события
источник
Я знаю, что на этот вопрос есть ответ, и все ответы хороши. Но я хотел добавить свои два цента к этому вопросу для людей, у которых есть похожая (но не совсем такая) проблема.
В более общем виде мы можем сделать что-то вроде этого:
$('body').click(function(evt){ if(!$(evt.target).is('#menu_content')) { //event handling code } });
Таким образом, мы можем обрабатывать не только события, запускаемые чем-либо, кроме элемента с идентификатором,
menu_content
но и событиями, которые запускаются чем-либо, кроме любого элемента, который мы можем выбрать с помощью селекторов CSS.Например, в следующем фрагменте кода я получаю события, запускаемые любым элементом, кроме всех
<li>
элементов, которые являются потомками элемента div с идентификаторомmyNavbar
.$('body').click(function(evt){ if(!$(evt.target).is('div#myNavbar li')) { //event handling code } });
источник
вот что я сделал. хотел убедиться, что могу щелкнуть любого из детей в моем средстве выбора даты, не закрывая его.
$('html').click(function(e){ if (e.target.id == 'menu_content' || $(e.target).parents('#menu_content').length > 0) { // clicked menu content or children } else { // didnt click menu content } });
мой фактический код:
$('html').click(function(e){ if (e.target.id != 'datepicker' && $(e.target).parents('#datepicker').length == 0 && !$(e.target).hasClass('datepicker') ) { $('#datepicker').remove(); } });
источник