2009-10-18 5 views
0

J'ai travaillé sur du code où j'ai déclenché le code sur hover/unhover. Ensuite, j'ai décidé de déclencher le même code également sur focus/blur. Habituellement avec hover/unhover seulement, je vais pour le format habituel hover comma no unhover. Mais cette fois, depuis que je suis en train d'ajouter focus/blur, je devais utiliser lier et utiliser this.bind avec la deuxième partie aussi, comme ceci:Jquery m'aider à analyser ce qui s'est passé: mouseover/mouseout ok mais pas hover/unhover

$.fn.gogogo = function (msg) { 
    $(this).bind("hover focus", function(){ 
     $("#screen").html(msg).show(); 
    }); 
    $(this).bind("unhover blur", function(){ 
     $("#screen").html("").hide(); 
    }); 
} 

Le problème est que peu importe ce que je faisais, hover/unhover n'a pas pris . Je devais revenir à mouseover/mouseout comme ça. Le code est identique, sauf pour les mots hover/unhover contre mouseover/mouseout

$.fn.gogogo = function (msg) { 
    $(this).bind("mouseover focus", function(){ 
     $("#screen").html(msg).show(); 
    }); 
    $(this).bind("mouseout blur", function(){ 
     $("#screen").html("").hide(); 
    }); 
} 

Je pensais vol stationnaire/unhover était l'abstraction jquery de mouseover/mouseout. Comment se fait le comportement est différent ici: hover/unhover casse mon code, tandis que mouseover/mouseout est ok?

merci.

Répondre

2

Il n'y a pas d'événement appelé hover. La méthode hover est une méthode pratique qui lie le gestionnaire d'événements aux événements mouseenter et mouseleave.

Si vous ouvrez la source jQuery, vous verrez que la méthode hover est définie comme ceci:

hover: function(fnOver, fnOut) { 
    return this.mouseenter(fnOver).mouseleave(fnOut); 
}, 

Vous devriez lier aux événements au lieu mouseenter et mouseleave.


EDIT: La différence entre mouseenter et mouseover est que mouseenter (et mouseleave) ne le font pas bulle. Cela signifie que vous obtiendrez un événement mouseover si la souris se déplace dans un élément à l'intérieur de celui auquel vous vous êtes lié (ce qui n'est probablement pas ce que vous voulez), alors que vous n'obtiendrez qu'un événement mouseenter. Pour un exemple, voir le documentation.

+0

Merci pour l'explication. Je me suis lié à «mouseover/mouseout» et cela a fonctionné. Quelle est la différence entre le 'mouseover/mouseout' que j'ai maintenant et' mouseenter/mouseleave'? – Chris

1

Il n'y a pas d'événement "survol". C'est juste une routine de commodité.

Questions connexes