jQuery нажмите в любом месте страницы, кроме 1 div
Как я могу вызвать функцию, когда я нажимаю в любом месте на моей странице, кроме одного div (id=menu_content
)?
большое спасибо
5 ответов:
вы можете подать заявку
click
onbody
документ и отменитьclick
обработка еслиclick
событие генерируется div с idmenu_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 });
попробуй такое
$('html').click(function() { //your stuf }); $('#menucontainer').click(function(event){ event.stopPropagation(); });
вы также можете использовать вне события
смотрите документацию для цель события jQuery. Используя целевое свойство объекта события, вы можете определить, где возник щелчок в
#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 });
Я знаю, что этот вопрос был дан ответ, и все ответы хорошие. Но я хотел добавить свои два цента к этому вопросу для людей, у которых есть похожие (но не совсем одинаковые) проблемы.
в более общем виде, мы можем сделать что-то вроде этого:
$('body').click(function(evt){ if(!$(evt.target).is('#menu_content')) { //event handling code } });
таким образом, мы можем обрабатывать не только события, вызванные чем-либо, кроме элемента с id
menu_content
но также события, которые запускаются чем угодно, кроме любого элемента, который мы можем выбрать с помощью CSS селекторы.например, в следующем фрагменте кода я получаю события, вызванные любым элементом, кроме all
<li>
элементы, которые являются потомками div элемента с idmyNavbar
.$('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(); } });