2017-08-16 2 views
2

Si j'attache deux événements de clic sur un élément, quel sera l'ordre d'exécution du deux gestionnaire. Je sais que l'ordre d'exécution pour jQuery est le même que l'ordre dans lequel les événements ont été attachés. Mais je ne suis pas sûr du comportement avec JavaScript.


Quel sera l'ordre d'exécution si j'attache deux mêmes événements sur un DOM

Si ce que le gestionnaire ajoute des événements alors si je veux gestionnaire remplacer tous les événements existants comment puis-je faire?

+0

sont les gestionnaires dont vous avez besoin pour passer outre en annexe avec jQuery? – vassiliskrikonis

+0

ouais avec jQuery mais attachement avec JS. –

Répondre

2

The handlers will execute in the order in which they were bound.

Le DOM3 event spec, introduit l'exigence qu'ils soient tirés pour l'enregistrement (ce que la plupart des navigateurs):

Ensuite, la mise en œuvre doit déterminer l'événement candidat de la cible actuelle des auditeurs. Ce doit être la liste de tous les écouteurs d'événement qui ont été enregistrés sur la cible actuelle dans leur ordre d'enregistrement.

De developer.mozilla.org

Événements dans la phase cible déclenchera tous les auditeurs sur un élément dans l'ordre de leur enregistrement, quelle que soit la useCapture parameter.-

En outre: Javascript event order

+0

Je pense aussi la même chose mais je me demandais à propos de la source où je peux vérifier cela. –

+0

Ma réponse est le lien vers la source :) – qiAlex

+0

Votre réponse est un lien vers les documents jQuery à propos de la méthode obsolète '.bind()'. La question concerne l'API DOM. – PeterMader

0

Si tout ce que vous voulez est de supprimer ou de remplacer les gestionnaires d'événements attachés par jQuery avec .on() méthode alors vous pouvez utiliser la méthode .off() respectivement pour les supprimer. Puis ajoutez à nouveau le gestionnaire que vous voulez utiliser. Consultez la documentation here.

Disons que les gestionnaires que vous savez qu'ils sont déjà attachés sont nommés fonctions comme ceci:

function someHandler(e) { 
    // do something with the event e 
} 

$('#myElement').on('click', someHandler); 

Vous pouvez supprimer celui-ci en appelant

$('#myElement').off('click', someHandler); 

Si les gestionnaires que nous fonctions anonymes comme si :

$('#myElement').on('click', function(e) { ... }); 

alors vous devez supprimer tous les écouteurs ci-joints avec jQuery (jQuery garde la trace des événements/auditeurs/gestionnaires attachés)

$('#myElement').off('click'); // remove ALL handlers for the event 
+0

Mais ma première question est le comportement de l'attachement de plusieurs événements de clic à un élément. –

+0

D'autres ont répondu correctement que les écouteurs et les gestionnaires d'événements sont appelés dans l'ordre où ils se sont joints (jquery ou vanilla javascript peu importe, jquery utilise des événements natifs sous le capot). Votre question OMI est en fait deux questions distinctes. La première pose une question sur l'ordre des événements et l'autre demande comment remplacer un gestionnaire d'événement. – vassiliskrikonis