Essayez d'utiliser mouseenter
y mouseleave
au lieu de mouseover
y mouseout
. Le premier ne se déclenche que lorsque le curseur entre dans la région de l'élément et le second se déclenche également lorsque le curseur se déplace entre les descendants.
J'ai ajouté ce code à votre page via ma console et cela a fonctionné comme prévu :
//bind an event handler to each nav element for the mouseenter event
$('.categoryButtons').children().bind('mouseenter', function () {
//call the `upIcon` function with the index of the current element
upIcon(($(this).index() + 1));
});
J'ai également supprimé la ligne onmouseover
pour chaque élément de la nav.
Mise à jour
Vous pouvez utiliser votre fonction existante de manière un peu différente et ne pas utiliser la fonction anonyme pour votre gestionnaire d'événements (remarquez le chaînage des fonctions pour éviter les sélections en double) :
function upIcon(event) {
var n = ($(this).index() + 1);
$('#icon' + n).animate({ backgroundPositionY : "-=15px" }, 200 ).animate({ backgroundPositionY : "+=15px" }, 200 );
}
$('.categoryButtons').children().bind('mouseenter', upIcon);
Lorsque vous faites référence à une fonction existante en tant que gestionnaire d'événement, on lui transmet l'attribut event
comme n'importe quel autre gestionnaire d'événement et vous pouvez également utiliser l'objet this
pour faire référence à l'élément sur lequel l'événement a été déclenché.