jQuery: plus d'un gestionnaire pour le même événement
Ce qui se passe si je lier deux gestionnaires d'événements pour le même événement pour le même élément?
Par exemple:
var elem = $("...")
elem.click(...);
elem.click(...);
La dernière gestionnaire de "gagner" ou bien les deux gestionnaires d'être exécuté?
Vous devez vous connecter pour publier un commentaire.
Les deux gestionnaires d'exécuter, le jQuery modèle d'événement permet à plusieurs gestionnaires sur un seul élément, donc un plus tard gestionnaire de ne pas remplacer un ancien gestionnaire.
Les gestionnaires d'exécuter dans l'ordre dans lequel ils ont été tenus.
jQuery('.btn').on('click',handlerClick);
est appelé à divers endroits, sans réellement.off
il anywher?bind
méthode. Voir ce pour plus de détails: learn.jquery.com/jquery-ui/widget-factory/...Supposons que vous ayez deux gestionnaires, f et g, et veulent s'assurer qu'ils sont exécutés dans un connue et fixe l'ordre, alors il suffit d'encapsuler eux:
De cette façon, il est (du point de vue de jQuery) seulement un gestionnaire, qui appelle f et g dans l'ordre spécifié.
de jQuery .bind() se déclenche dans l'ordre qu'il a été lié:
Source: http://api.jquery.com/bind/
Parce que jQuery d'autres fonctions (ex.
.click()
) sont des raccourcis pour.bind('click', handler)
, je suppose qu'ils sont également déclenchés dans l'ordre où ils sont liés.Vous devriez être en mesure d'utiliser le chaînage d'exécuter les événements dans l'ordre, par exemple:
Je suppose que le code ci-dessous est en train de faire la même
Source: http://www.peachpit.com/articles/article.aspx?p=1371947&seqNum=3
TFM dit aussi:
When an event reaches an element, all handlers bound to that event type for the element are fired. If there are multiple handlers registered, they will always execute in the order in which they were bound. After all handlers have executed, the event continues along the normal event propagation path.
À la fois des gestionnaires appelée.
Vous pensez peut-être de d'événements en ligne de liaison (par exemple
"onclick=..."
), où un gros inconvénient est qu'un gestionnaire peut être défini pour un événement.jQuery est conforme à la DOM Niveau 2 inscription à un événement, modèle:
De le faire fonctionner avec succès en utilisant les 2 méthodes: Stephan202 de l'encapsulation et de plusieurs écouteurs d'événement. J'ai 3 onglets de recherche, nous allons définir leur texte de saisie de l'id dans un Tableau:
Lorsque le contenu de searchtab1 changements, je veux mettre à jour searchtab2 et searchtab3. Il l'a fait de cette façon pour l'encapsulation:
Plusieurs écouteurs d'événement:
J'aime les deux méthodes, mais le programmeur a choisi d'encapsulation, cependant, de nombreux écouteurs d'événement travaillé également. Nous avons utilisé google Chrome pour tester.
Il y a une solution pour garantir un gestionnaire qui se passe après l'autre: attacher le deuxième gestionnaire d'un élément contenant et laissez l'événement de la bulle vers le haut. Dans le gestionnaire apposée sur le conteneur, vous pouvez regarder des événements.cible et de faire quelque chose si c'est celui qui vous intéresse.
Brut, peut-être, mais ça devrait fonctionner.
jquery va exécuter à la fois gestionnaire, puisqu'il permet à plusieurs gestionnaires d'événements.
J'ai créé un exemple de code. Vous pouvez l'essayer
démo