2013-06-21 3 views
2

Я пытаюсь скрыть некоторые элементы li, когда нажимается какой-либо элемент на странице, который не является им или их контейнером (div.dropdown_container). Однако я не могу заставить его работать.зарегистрируйтесь, нажмите на все, что есть на теле, кроме div и всех его детей.

$("body").on("click", "*:not(div.dropdown_container, div.dropdown_container > *)", function(e){ 
    // don't want to hide the very first `li` 
    // it contains a span i want always to show 
    $("ul.dropdown_ul > li:not(#first)").hide(); 
    }); 

JSBIN - very last function on the page

Как я могу изменить это так, что все получает этот слушателя, но не div.dropdown_container или любой дочерний элемент внутри него?

+0

Большой вопрос. – usefulBee

ответ

4

Это должно быть сделано.

e.target получает элемент, который был нажат.

Таким образом, это проверяет, был ли клик создан на самом div или любом из его дочерних элементов.

$("body").on("click",function(e) { 

     if($(e.target).is('div.dropdown_container') 
      || $(e.target).closest('div.dropdown_container').length) { 
      // do something 
     } 
     else { 
     // do something else 
     } 
}); 
+0

Спасибо. 'if ($ (e.target) .is ('div.dropdown_container') || $ (e.target) .closest ('div.dropdown_container'). length) {console.log (" A ");} else {console.log ("B");}}); 'всегда записывает' 'A '' для меня. – 1252748

+0

Можете ли вы создать образец скрипта? –

+0

http://jsbin.com/iwicud/16/edit нажав на один из текстовых входов журнала «B» на самом деле, я ошибся. Но щелчок в другом месте на теле не делает. – 1252748