Подтвердить что ты не робот

JQuery нажмите в любом месте страницы, кроме 1 div

Как я могу вызвать функцию, когда я нажимаю в любом месте моей страницы, кроме одного div (id = menu_content)?

Большое спасибо

4b9b3361

Ответ 1

Вы можете применить click в body документа и отменить click обработку, если событие click генерируется div с id 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

});

Ответ 2

попробуйте это

 $('html').click(function() {
 //your stuf
 });

 $('#menucontainer').click(function(event){
     event.stopPropagation();
 });

вы также можете использовать внешние события

Ответ 3

См. документацию для 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
});

Ответ 4

Я знаю, что на этот вопрос был дан ответ, И все ответы хороши. Но я хотел добавить мои два цента к этому вопросу для людей, у которых есть сходная (но не совсем такая же) проблема. Ответ Adils действительно хорош. В более общем виде мы можем сделать что-то вроде этого:

$('body').click(function(evt){    
if(!$(evt.target).is('#menu_content')) {
        //event handling code
 }
});

Таким образом мы не только обрабатываем события, которые запускаются чем-либо, кроме элемента с id = "menu_content", но также мы можем обрабатывать события, которые запускаются чем угодно, кроме любого элемента, который мы можем выбрать с помощью селекторов CSS. например, в следующем фрагменте кода я получаю события, запущенные любым элементом, кроме всех элементов li, которые являются потомками элемента div с id = "myNavbar"

$('body').click(function(evt){    
if(!$(evt.target).is('div#myNavbar li')) {
    //event handling code
 }
});

Ответ 5

вот что я сделал. хотел, чтобы я мог щелкнуть любого из детей в моем дампике, не закрывая его.

$('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();
    }
});