$ ('html'). click () ... где угодно, кроме одного элемента - PullRequest
19 голосов
/ 03 апреля 2012

У меня есть динамически добавленное меню, которое я удаляю, если вы нажимаете в любом месте страницы, включая ссылки самого меню.Я пытаюсь предотвратить удаление, если вы нажмете на конкретную ссылку, и это просто не работает для меня.К сожалению, я не могу использовать метод делегата, если это поможет, из-за старой версии на jquery, используемой на стороне клиента, нет возможности обновить его.

Так что, возможно, вы могли бы предложить, если есть какой-либо способ сделать это.Вот быстрый пример моего.

<script>
            $(function() {

                $('.menu').append('<a href="" class="solid">Option</a> <a href="">Option</a> <a href="">Option</a>');                               

                $('.menu a').live('click',function(){
                    return false;
                });

                $('a.solid').live('click',function(){
                    return false;
                });

                $('html').click(function() {                    
                    $('.menu').remove();                
                });             

            });

        </script>

и контейнера

<div class="menu"></div>

Ответы [ 4 ]

42 голосов
/ 03 апреля 2012

Может быть, это будет работать так

$('html').click(function(e) {                    
   if(!$(e.target).hasClass('solid') )
   {
       $('.menu').remove();                
   }
}); 

см .: http://jsfiddle.net/fq86U/2/

5 голосов
/ 03 апреля 2012

вы пробовали это:

$('.menu a').click(function(event){
   event.stopPropagation();
});
3 голосов
/ 03 апреля 2012

Вы также можете обнаружить клики по всему документу и проверить, является ли текущий элемент, по которому вы щелкнули, элементом вашего меню

$(document).click(function(event){
    if(event.target !== $('.menu')[0]) {
        // hide the menu...
    }
});​
1 голос
/ 01 июня 2016
$('html').click(function(e) {

        /* exept elements with class someClass */ 
        if($(e.target).hasClass('someClass')){
            e.preventDefault();
            return;
        }

        /* but be carefull the contained links! to be clickable */
        if($(e.target).is('a')){
            return;
        }

        /* here you can code what to do when click on html */

    });
...