Remplacer tous les événements JavaScript lié à un élément avec un seul nouveau cas
En supposant qu'il existe un grand nombre d'éléments dans l'ensemble du site qui ont un nombre inconnu et le type d'événements liés à eux.
Si j'ai besoin de remplacer tous ces événements avec une seule tenue de l'événement, et uniquement à cet événement se déclenche, quelles sont les recommandations?
Je serais de liaison de l'événement à un gestionnaire d'événements click, et je suis en utilisant jQuery.
Merci d'avance.
- Tu veux dire sans déliaison l'origine des gestionnaires d'événements?
- Pouah; cela sonne comme une très mauvaise idée. Cependant, je soupçonne que vous pourriez le faire par trouver l'interne jQuery mécanisme et de le saboter avec votre propre code.
- dw - Déliaison tous les originaux des gestionnaires d'événements click est très bien, aussi longtemps que n'exige pas l'identification de l'exacte de l'événement, qui est associé avec le clic. Si il existe un moyen de "délier tous les événements de clic", puis sur "lier ce spécifique, en remplaçant cliquez sur l'événement", alors ce serait bien.
- Tous les éléments d'obtenir le même gestionnaire pour chaque type d'événement? Et ont été à l'origine lié à l'aide de jQuery? Si non, comment sont-ils liés?
Vous devez vous connecter pour publier un commentaire.
Vous êtes à la recherche pour
jQuery#unbind
.Pour supprimer tous les événements sur un élément ou un ensemble d'éléments, il suffit de faire:
Pour séparer seulement des gestionnaires de clic, utilisez
unbind('click')
:Pour séparer tous les gestionnaires de clic et lie immédiatement votre propre gestionnaire après cela, vous pouvez faire quelque chose comme ceci:
Notez que cela ne fonctionne que pour des événements liés à l'aide de jQuery (à l'aide de
.bind
ou de toute méthode jQuery qu'utilise.bind
en interne). Si vous souhaitez supprimer tous les possibles onclick événements à partir d'un ensemble donné d'éléments, vous pouvez utiliser:$(".some-selector").unbind("click").attr("onclick", "").each(function(){ this.onclick = null; });
?J'aimerais donner une pensée sans suppression de tous les événements, tous ensemble (juste les remplacer).
Si votre nouveau seule tenue de l'événement (nous l'appelons "cliquez" ici) est spécifique à l'élément auquel il se lie à l', alors je crois que vous pouvez ignorer tous les autres événements simplement par stopPropagation() fonction. Comme ce
Il va cesser d'événements bulles, de sorte que vos autres événements ne se déclenche pas. utilisation stopImmediatePropagation() pour empêcher d'autres événements fixés sur les mêmes éléments que l'", cliquez sur" ne.
Par exemple, si "mouseleave" événement est aussi se lier à $("spécifique-sélecteur .spécifique de la classe"), élément, il ne se déclenche pas, trop.
Au dernier, tous les autres événements ne se déclenche pas sur cet élément, mais votre nouveau ", cliquez sur" élément.
La question, non résolue est de savoir si d'autres événements aussi utiliser stopPropagation()? ... Alors je pense que celui avec la meilleure spécification de victoires, alors essayez d'éviter complexe, trop d'événements est la dernière suggestion.
Vous pouvez voir "Directe et déléguée événements" sur jQuery site pour plus d'informations.
Ressemble c'est assez simple en fait:
Merci pour vos réponses bien.
Essayez d'utiliser live au lieu de
bind
. Ensuite, vous pouvez facilement supprimer la liaison en direct avec mourir de sélecteur qui est rapide et en définir une autre de vivre tout aussi rapide.DOM n'est pas touché à tout. L'événement de la condition est évaluée sur la survenue de l'événement.
Mais en général, si vous voulez juste pour échanger des fonctions de gestionnaire d'pourquoi ne pas le faire de cette façon:
Cela donne absolument aucun coût de tout changement, de reliaison etc.