web-dev-qa-db-fra.com

$ ('html'). click () ... n'importe où sauf un élément

J'ai un menu ajouté dynamiquement que je supprime si vous cliquez n'importe où sur la page, y compris les liens de menu. Ce que j'essaie de faire est d'empêcher la suppression si vous cliquez sur un lien spécifique et que cela ne fonctionne tout simplement pas pour moi. Malheureusement, je ne peux pas utiliser la méthode des délégués, si cela peut aider, en raison de l'ancienne version de jquery utilisée côté client, aucune option pour la mettre à jour.

Alors peut-être que vous pourriez suggérer s'il y a un moyen de le faire. Voici un exemple rapide de la mienne.

<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>

et le conteneur

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

Peut-être que ça va marcher comme ça

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

voir: http://jsfiddle.net/fq86U/2/

40
sneeky

avez-vous essayé ceci:

$('.menu a').click(function(event){
   event.stopPropagation();
});
5
huysentruitw

Vous pouvez également détecter les clics sur l'ensemble du document et vérifier si l'élément actuel sur lequel vous avez cliqué est votre élément de menu.

$(document).click(function(event){
    if(event.target !== $('.menu')[0]) {
        // hide the menu...
    }
});​
3
pplewa
$('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 */

    });
0
alex