2012-02-25 7 views
1

Peut-être que je suis, juste fatigué mais j'ai un menu clic droit que je veux fermer lorsque l'utilisateur clique ailleurs que dans le menu. Mais je n'arrive pas à comprendre comment le faire disparaître lorsque l'utilisateur clique sur autre chose.Cliquez sur l'événement lorsque vous ne cliquez pas sur un élément

Voici le code pour montrer le menu:

// If mouse click on was pressed 
$('#content_list table tr').bind('mouseup', function(event) { 
    // if right click 
    if(event.which == 3) { 
     showRightClickMenu(event); 
    } 
    event.preventDefault(); 
    event.stopPropagation(); 
}); 

Et ce que je suis pour cacher le menu

// If mouse click outside document 
$(document).bind('blur', function(event) { 
    hideRightClickMenu(); 
    event.stopPropagation(); 
}); 

// If mouse click not on the menu 
$('*:not(#rightClickMenu *)').bind('mousedown keydown', function(event) { 
    hideRightClickMenu(); 
    event.stopPropagation(); 
}); 

Les premiers contrôles de lierait si l'utilisateur clique en dehors du document et la seconde liaison vérifie si l'utilisateur clique sur tout sauf le menu. Mais le second ne fonctionne pas vraiment. Si je clique sur le menu, le menu est caché.

Ne devrait pas être si dur imo ... Quelqu'un a des idées?

Répondre

1

Essayez cette façon

$(document.body).bind('click', function() { 
    hideRightClickMenu(); 
}); 

$(window).bind('blur', function() { 
    hideRightClickMenu(); 
}); 
+0

Cela semble faire le travail. Je vous remercie. – Patrik

+0

@Patrik essayez aussi un exemple de la deuxième réponse. J'ai utilisé mon exemple en raison de certains problèmes avec IE récemment. Le focus a été perdu sur le clic sur la barre de défilement dans div, par exemple. – Cheery

0

Essayez avec focusout() événement et en utilisant on() au lieu de l'ancien bind(). Cela fonctionnera même avec plusieurs sous-menus. http://jsfiddle.net/elclanrs/jhaF3/1/

// Something like this... 
$('#menu li').on('click', function() { 
    $(this).find('ul').show(); 
}).find('ul').on('focusout', function(){ 
    $(this).hide(); 
}); 
Questions connexes