J'ai donc un menu déroulant qui s'affiche en un clic, selon les exigences de l'entreprise. Le menu redevient masqué lorsque vous vous en éloignez.
Mais maintenant, on me demande de le garder en place jusqu'à ce que l'utilisateur clique n'importe où sur le document. Comment cela peut-il être accompli?
Ceci est une version simplifiée de ce que j'ai maintenant:
$(document).ready(function() {
$("ul.opMenu li").click(function(){
$('#MainOptSubMenu',this).css('visibility', 'visible');
});
$("ul.opMenu li").mouseleave(function(){
$('#MainOptSubMenu',this).css('visibility', 'hidden');
});
});
<ul class="opMenu">
<li id="footwo" class="">
<span id="optImg" style="display: inline-block;"> <img src="http://localhost.vmsinfo.com:8002/insight/images/options-hover2.gif"/> </span>
<ul id="MainOptSubMenu" style="visibility: hidden; top: 25px; border-top: 0px solid rgb(217, 228, 250); background-color: rgb(217, 228, 250); padding-bottom: 15px;">
<li>some</li>
<li>nav</li>
<li>links</li>
</ul>
</li>
</ul>
J'ai essayé quelque chose comme ça en $('document[id!=MainOptSubMenu]').click(function()
pensant que cela se déclencherait sur tout ce qui n'était pas le menu, mais cela ne fonctionnait pas.
Réponses:
Jetez un œil à l'approche utilisée par cette question:
Comment détecter un clic en dehors d'un élément?
la source
La réponse est juste, mais cela ajoutera un auditeur qui se déclenchera à chaque fois qu'un clic se produira sur votre page. Pour éviter cela, vous pouvez ajouter l'auditeur pour une seule fois:
Modifier: si vous voulez éviter le
stopPropagation()
bouton initial, vous pouvez utiliser cecila source
e.stopPropagation()
dans Chrome pour empêcher le premier événement de se déclencher dans leone()
gestionnaireLes
stopPropagation
options sont mauvaises car elles peuvent interférer avec d'autres gestionnaires d'événements, y compris d'autres menus qui pourraient avoir attaché des gestionnaires de fermeture à l'élément HTML.Voici une solution simple basée sur la réponse de user2989143 :
la source
Si l'utilisation d'un plugin vous convient, alors je suggère le plugin clickoutside de Ben Alman situé ici :
son utilisation est aussi simple que ceci:
J'espère que cela t'aides.
la source
2 options que vous pouvez étudier:
la source
J'ai trouvé une variante de la solution de Grsmto et la solution de Dennis fixe mon problème.
la source
J'utilise cette solution avec plusieurs éléments avec le même comportement dans la même page:
stopPropagation () est une mauvaise idée, cela rompt le comportement standard de beaucoup de choses, y compris les boutons et les liens.
la source
$target.closest('#menu-container, #menu-activator').length === 0
J'ai récemment fait face au même problème. J'ai écrit le code suivant:
Cela a parfaitement fonctionné pour moi.
la source
Et ça?
la source
Je trouve plus utile d'utiliser mousedown-event au lieu de click-event. L'événement de clic ne fonctionne pas si l'utilisateur clique sur d'autres éléments de la page avec des événements de clic. En combinaison avec la méthode one () de jQuery, cela ressemble à ceci:
la source
même je suis tombé sur la même situation et l'un de mes mentors m'a fait part de cette idée.
étape: 1 lorsque vous cliquez sur le bouton sur lequel nous devons afficher le menu déroulant. puis ajoutez le nom de classe ci-dessous "more_wrap_background" à la page active actuelle comme indiqué ci-dessous
étape-2 puis ajoutez un clic pour la balise div comme
où hideDropDown est la fonction à appeler pour masquer le menu déroulant
Étape 3 et étape importante lors du masquage du menu déroulant est de supprimer cette classe que vous avez ajoutée plus tôt comme
Je supprime en utilisant son identifiant dans le code ci-dessus
la source
Et mieux vaut définir l'auditeur uniquement lorsque votre menu est visible et toujours supprimer l'auditeur une fois que le menu est masqué.
la source
Je pense que vous avez besoin de quelque chose comme ça: http://jsfiddle.net/BeenYoung/BXaqW/3/
J'espère que cela vous sera utile!
la source
Utilisez le sélecteur «: visible». Où .menuitem est le ou les éléments à masquer ...
Ou si vous avez déjà le ou les éléments .menuitem dans un var ...
la source
Cela n'a pas à être compliqué.
la source