événements jQuery MouseEnter et mouseOut avec .toggle () inverse lorsque la souris est déjà sur le onLoad élément?

StackOverflow https://stackoverflow.com/questions/2213155

Question

J'ai un menu déroulant fonctionne très bien avec le code suivant:

$('#menu ul li').mouseenter(function(){
    $(this).children(".dropdown").toggle();
}).mouseleave(function(){
    $(this).children(".dropdown").toggle();
});

Cela fonctionne comme on peut s'y attendre. Le problème est que si la souris est déjà mouseenter sur le $('#menu ul li') lorsque le $(document).ready(function(){ }) est tiré, la bascule fonctionne dans l'autre sens?

Comment puis-je éviter cela?

Ex: http://screenr.com/wbd

Était-ce utile?

La solution

vous ne voulez pas faire show() sur mouseenter et hide() sur mouseleave?

Autres conseils

Au lieu d'appeler toggle sans arguments, vos gestionnaires d'événements de souris peuvent transmettre des valeurs explicites showOrHide booléens. Passez à true toggle() dans la routine de mouseenter et false dans mouseleave. Ou comme l'a suggéré l'autre réponse et il suffit d'utiliser show et hide.

Lorsque vous chargez le document sans déplacer la souris, aucune action mouseover sera basculée jusqu'à ce que vous déplacez la souris. Mais je pense que mouseover est basculée que votre souris se déplace, événement si elle est déjà « sur » onLoad.

Qu'en est-ce code? Quoi qu'il en soit, je pense que votre bug vient de mouseout pas parce que JS basculés vérifie que toutes les x ms, et si vous vous déplacez trop vite, il sort de la div sans appeler l'événement.

$('#menu ul li').mouseenter(function(){
    // hide all other divs
    $(".dropdown").hide(0);
    // show the div we want
    $(this).children(".dropdown").show(0);
}).mouseleave(function(){
    $(".dropdown").hide(0);
});

Si vous ne se soucient pas des animations, faire avec CSS est toujours une meilleure façon puis avec JS.

Vous aurez besoin de le configurer comme ceci:

<div id="menu">
    <ul>
        <li>
            Menu 1
            <div class="dropdown">Sub1</div>
            <div class="dropdown">Sub2</div>
        </li>
        <li>
            Menu 2
            <div class="dropdown">Sub1</div>
            <div class="dropdown">Sub2</div>
        </li>
    </ul>
</div>

CSS:

.dropdown { display: none; position: relative; }
#menu li:hover .dropdown { display: block; }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top