J'en ai un <ul>
qui est rempli de javascript après le chargement initial de la page. J'utilise actuellement .bind
avec mouseover
et mouseout
.
Le projet vient d'être mis à jour vers jQuery 1.7, j'ai donc la possibilité de l'utiliser .on
, mais je n'arrive pas à le faire fonctionner hover
. Est-il possible d'utiliser .on
avec hover
?
EDIT : Les éléments auxquels je suis lié sont chargés avec javascript après le chargement du document. C'est pourquoi j'utilise on
et pas seulement hover
.
mouseenter
etmouseleave
, comme suggéré par calebthebrewer.Réponses:
( Regardez la dernière modification de cette réponse si vous devez utiliser
.on()
des éléments remplis de JavaScript )Utilisez ceci pour les éléments qui ne sont pas remplis en utilisant JavaScript:
.hover()
a son propre gestionnaire: http://api.jquery.com/hover/Si vous voulez faire plusieurs choses, enchaînez-les dans le
.on()
gestionnaire comme ceci:Selon les réponses fournies ci-dessous, vous pouvez utiliser
hover
avec.on()
, mais:En outre, il n'y a aucun avantage en termes de performances à l'utiliser et c'est plus volumineux que d'utiliser simplement
mouseenter
oumouseleave
. La réponse que j'ai fournie nécessite moins de code et est la bonne façon de réaliser quelque chose comme ça.ÉDITER
Cela fait un moment que cette question n'a pas reçu de réponse et elle semble avoir gagné du terrain. Le code ci-dessus existe toujours, mais je voulais ajouter quelque chose à ma réponse d'origine.
Bien que je préfère utiliser
mouseenter
etmouseleave
(m'aide à comprendre ce qui se passe dans le code) avec,.on()
cela revient à écrire ce qui suit avechover()
Étant donné que la question initiale a demandé comment ils pouvaient utiliser correctement
on()
avechover()
, je pensais que je corrigerais l'utilisation deon()
et n'a pas trouvé nécessaire d'ajouter lehover()
code au moment.MODIFIER LE 11 DÉCEMBRE 2012
Certaines nouvelles réponses fournies ci-dessous expliquent comment cela
.on()
devrait fonctionner si ladiv
question en question est remplie à l'aide de JavaScript. Par exemple, supposons que vous remplissiez un événementdiv
utilisant jQuery.load()
, comme ceci:Le code ci-dessus pour
.on()
ne tiendrait pas. Au lieu de cela, vous devez modifier légèrement votre code, comme ceci:Ce code fonctionnera pour un élément rempli de JavaScript après qu'un
.load()
événement s'est produit. Remplacez simplement votre argument par le sélecteur approprié.la source
.on()
solution fonctionne en supprimant le pseudo-survol et en utilisant les vrais. J'aime le premier que vous avez illustré avec mouseenter / mouseleave +1 pour celaAucune de ces solutions n'a fonctionné pour moi lors du survol des objets créés après le chargement du document en tant que demande de question. Je sais que cette question est ancienne mais j'ai une solution pour ceux qui cherchent toujours:
Cela liera les fonctions au sélecteur afin que les objets avec ce sélecteur créés après que le document soit prêt pourront toujours l'appeler.
la source
mouseover
etmouseout
ici provoquera le déclenchement continu du code à mesure que l'utilisateur déplace la souris à l'intérieur de l'élément. Je pensemouseenter
et je suismouseleave
plus approprié car il ne se déclenchera qu'une fois à l'entrée.Je ne sais pas à quoi ressemble le reste de votre Javascript, donc je ne pourrai pas dire s'il y a une interférence. Mais
.hover()
fonctionne très bien comme un événement avec.on()
.Si vous voulez pouvoir utiliser ses événements, utilisez l'objet retourné de l'événement:
http://jsfiddle.net/hmUPP/2/
la source
$('#id').hover(function(){ //on }, function(){ //off});
.on()
avechover
quand vous pouvez tout aussi bien vous en débarrasser.on()
et le remplacer par la.hover()
fonction et obtenir les mêmes résultats. N'est-ce pas jQuery d'écrire moins de code ??mouseenter
andmouseleave
fonctionne with.on()
hover
la prise en charge des événements dans aOn()
été déconseillée dans jQuery 1.8 et supprimée dans jQuery 1.9.La fonction de survol de jQuery offre des fonctionnalités de survol et de sortie de souris.
$ (sélecteur) .hover (inFunction, outFunction);
Source: http://www.w3schools.com/jquery/event_hover.asp
la source
Je viens de surfer sur le Web et j'ai senti que je pouvais contribuer. J'ai remarqué qu'avec le code ci-dessus publié par @calethebrewer peut entraîner plusieurs appels sur le sélecteur et un comportement inattendu par exemple: -
Ce violon http://jsfiddle.net/TWskH/12/ illustre mon propos. Lors de l'animation d'éléments tels que des plugins, j'ai constaté que ces déclencheurs multiples entraînent un comportement involontaire qui peut entraîner l'animation ou le code appelé plus qu'il n'est nécessaire.
Ma suggestion est de simplement remplacer par mouseenter / mouseleave: -
Bien que cela ait empêché d'appeler plusieurs instances de mon animation, j'ai finalement opté pour le survol de la souris / souris car je devais déterminer quand les enfants du parent étaient survolés.
la source
Vous pouvez l'utiliser
.on()
avechover
ce que dit la section Notes supplémentaires:Ce serait de faire ce qui suit:
EDIT (note pour les utilisateurs de jQuery 1.8+):
la source
mouseenter
etmouseleave
... Je sais, cela ne répond pas à la question d'origine d'OP, mais, en utilisanthover
de cette façon, ce n'est pas sage..hover()
.mouseenter
etmouseleave
plutôt que de simplement le faire fonctionnerhover
. S'il n'y a pas vraiment de raison d'utiliserhover
pour des raisons de performances, pourquoi l'utiliser quand il est fortement déconseillé pour le nouveau code?hover
la prise en charge des événements dans aOn()
été déconseillée dans jQuery 1.8 et supprimée dans jQuery 1.9.la source
Vous pouvez fournir un ou plusieurs types d'événements séparés par un espace.
Donc, c'est
hover
égalmouseenter mouseleave
.Voici ma suggestion:
la source
Si vous en avez besoin comme condition dans un autre événement, je l'ai résolu de cette façon:
Ensuite, dans un autre événement, vous pouvez facilement l'utiliser:
(J'en vois certains utiliser
is(':hover')
pour résoudre ce problème. Mais ce n'est pas (encore) un sélecteur jQuery valide et ne fonctionne pas dans tous les navigateurs compatibles)la source
Le plugin jQuery hoverIntent http://cherne.net/brian/resources/jquery.hoverIntent.html va beaucoup plus loin que les approches naïves répertoriées ici. Bien qu'ils fonctionnent certainement, ils ne se comportent pas nécessairement comme les utilisateurs les attendent.
La principale raison d'utiliser hoverIntent est la fonction de délai d' expiration . Cela vous permet de faire des choses comme empêcher un menu de se fermer parce qu'un utilisateur fait glisser sa souris légèrement trop loin vers la droite ou la gauche avant de cliquer sur l'élément qu'il souhaite. Il fournit également des capacités pour ne pas activer les événements de vol stationnaire dans un barrage et attend le vol stationnaire concentré.
Exemple d'utilisation:
De plus amples explications sont disponibles sur https://stackoverflow.com/a/1089381/37055
la source