217 votes

équivalent jQuery de la méthode addEventListener de JavaScript

J'essaie de trouver l'équivalent jQuery de cet appel de méthode JavaScript :

document.addEventListener('click', select_element, true);

Je suis allé aussi loin que :

$(document).click(select_element);

mais cela ne permet pas d'obtenir le même résultat, car le dernier paramètre de la méthode JavaScript - un booléen qui indique si le gestionnaire d'événements doit être exécuté dans la phase de capture ou de bulle (d'après ce que j'ai compris de la méthode http://www.quirksmode.org/js/events_advanced.html ) - est laissé de côté.

Comment puis-je spécifier ce paramètre, ou obtenir la même fonctionnalité, en utilisant jQuery ?

4 votes

La capture d'événements n'est pas supportée par jQuery, car la capture d'événements n'est pas supportée par IE, que jQuery supporte ;) Vous recherchez la compatibilité avec IE ?

0 votes

Merci, Crescent Fresh - Je pense que cela a du sens maintenant. J'ai besoin de la compatibilité avec IE, donc je suppose que je dois oublier la phase de capture.

165voto

Russ Cam Points 58168

Tous les navigateurs ne prennent pas en charge la capture d'événements (par exemple, les versions d'Internet Explorer inférieures à 9 ne le font pas), mais tous prennent en charge le bouillonnement d'événements, c'est pourquoi c'est la phase utilisée pour lier les gestionnaires aux événements dans toutes les abstractions inter-navigateurs, y compris celles de jQuery.

Ce qui se rapproche le plus de ce que vous recherchez dans jQuery est d'utiliser bind() (remplacée par on() dans jQuery 1.7+) ou les méthodes jQuery spécifiques à un événement (dans ce cas, click() qui appelle bind() en interne de toute façon). Tous utilisent la phase de bouillonnement d'un événement soulevé.

7 votes

On dirait qu'IE9 le supporte enfin. blogs.msdn.com/b/ie/archive/2010/03/26/

0 votes

Et pourquoi ne supportent-ils pas la capture d'événements ? quels sont les inconvénients de la capture d'événements ?

2 votes

Pour être clair, vous êtes en train de dire que ce que le PO veut n'est pas possible -- que vous devez utiliser le bullage, et ne pouvez pas utiliser la capture. C'est bien ça ?

123voto

Phong Points 1616

À partir de jQuery 1.7, .on() est maintenant la méthode préférée pour lier les événements, plutôt que .bind() :

De http://api.jquery.com/bind/ :

À partir de la version 1.7 de jQuery, la méthode .on() est la méthode préférée pour attacher des gestionnaires d'événements à un document. Dans les versions antérieures, la méthode .bind() est utilisée pour attacher un gestionnaire d'événements directement à des éléments éléments. Les gestionnaires sont attachés aux éléments actuellement sélectionnés dans l'objet jQuery, et ces éléments doivent donc exister au moment où l'appel est effectué. à .bind(). Pour une liaison d'événements plus souple, consultez la discussion de la délégation d'événements dans .on() ou .delegate().

La page de documentation se trouve à l'adresse suivante http://api.jquery.com/on/

0 votes

La réponse acceptée a été modifiée pour tenir compte de ce point.

58voto

Ben Rowe Points 15269

La fonction la plus proche serait la fonction de liaison :

http://api.jquery.com/bind/

$('#foo').bind('click', function() {
  alert('User clicked on "foo."');
});

16voto

tbjers Points 302

Une chose à noter est que les méthodes d'événements de jQuery ne déclenchent pas de pièges. load en embed qui contiennent le DOM SVG qui se charge en tant que document séparé dans le fichier embed étiquette. Le seul moyen que j'ai trouvé pour piéger un load sur ces derniers devaient utiliser du JavaScript brut.

Cela ne fonctionnera pas (j'ai essayé on / bind / load méthodes) :

$img.on('load', function () {
    console.log('FOO!');
});

Cependant, cela fonctionne :

$img[0].addEventListener('load', function () {
    console.log('FOO!');
}, false);

1 votes

Il convient de noter que cette méthode est la bonne si vous souhaitez ne pas écraser d'autres gestionnaires d'événements liés pour le ou les éléments.

1 votes

Qu'est-ce que le $img ?

13voto

Mark Landers Points 379

Vous devriez maintenant utiliser le .on() pour lier les événements.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X