2011-08-31 3 views
2

J'ai lu beaucoup d'autres questions concernant la façon de fermer un div lorsque vous cliquez en dehors de celui-ci, mais j'ai un problème composé en ce que je J'ai d'autres éléments qui sont liés avec .live()Utilisez jQuery pour masquer DIV lorsque vous cliquez à l'extérieur, mais permettre la propagation d'événements

Ce que je veux arriver, c'est que si je clique n'importe où ailleurs sur la page, la div devrait disparaître, y compris si je clique sur un élément 'live'. Lorsque je clique sur cet élément en direct, je veux qu'il soit géré normalement. Pour autant que je l'ai lu, la méthode de base pour gérer la fermeture de la div consiste à attacher un écouteur de clic au document ou $, mais cela empêcherait tout autre événement de survoler le gestionnaire body/doc mentionné précédemment. Y a-t-il un moyen de contourner ceci?

+0

ce site a donné une explication pratique de la façon dont en direct() fonctionne: http://www.bennadel.com/blog/1751-jQuery-Live-Method-And -Event-Bubbling.htm – Steve

+0

Peut-être que cela peut aider: http://api.jquery.com/event.target/ – yoda

+1

Je ne vois pas vraiment votre problème, car il vous suffit de ne pas retourner false/call stopPropagation de la méthode cela ferme la div. – Alxandr

Répondre

1

En live, les événements passent de l'avant à l'arrière dans cet ordre. Dans le clic de votre élément 'live' (qui est un enfant direct/indirect de votre objet corps), si vous ne retournez pas false ou arrêtez la propagation, il grimpera dans l'échelle pour atteindre le gestionnaire de clic du document. Attacher le clic du document via live ne semble pas fonctionner.

mise en œuvre de vérification exemple ici: http://jsfiddle.net/VHtSP/6/

$('div.menu').live('click', function(e) { 
    e.stopPropagation(); 
    alert('click inside menu. will not propagate.'); 
    return false; 
}); 

$(document).click(function() { 
    alert('document click() handler.'); 
    // close the div 
    $('div.menu').hide(); 
}); 

$('a').live('click', function() { 
    alert('<a> click() handler'); 
    // .. your code to handle the live element's click 
}); 
Questions connexes