jQuery équivalent de la méthode addEventListener de JavaScript

j'essaie de trouver l'équivalent jQuery de cette méthode JavaScript appel:

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

j'ai été aussi loin que:

$(document).click(select_element);

mais cela ne donne pas le même résultat que 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 bouillonnement (selon mon interprétation de http://www.quirksmode.org/js/events_advanced.html ) - est à gauche.

comment spécifier ce paramètre, ou obtenir la même fonctionnalité, en utilisant jQuery?

167
demandé sur Bungle 2010-03-08 00:44:35

6 réponses

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 bubbling d'événements, ce qui explique pourquoi c'est la phase utilisée pour lier les gestionnaires à des événements dans toutes les abstractions de navigateur, jQuery inclus.

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

125
répondu Russ Cam 2014-07-30 18:30:54

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

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

de jQuery 1.7, l' .() la méthode est la méthode préférée pour attacher des gestionnaires d'événements à un document. Pour les versions antérieures, l' .méthode bind() est utilisé pour attacher un gestionnaire d'événement directement à élément. Les manipulateurs sont attachés au éléments actuellement sélectionnés dans l'objet jQuery, donc ces éléments doivent exister à l'endroit où l'appel de. bind() se produit. Pour plus de flexibilité dans la fixation des événements, voir la discussion des cas de délégation .sur() ou .délégué.)(

la page de documentation est située à http://api.jquery.com/on /

106
répondu 2015-05-29 06:11:43

la chose la plus proche serait la fonction bind:

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

$('#foo').bind('click', function() {
  alert('User clicked on "foo."');
});
45
répondu Ben Rowe 2010-03-07 22:02:26

une chose à noter est que les méthodes jQuery event ne tirent pas/piège load sur embed étiquettes qui contiennent SVG DOM qui charge comme un document séparé dans le embed étiquette. La seule façon que j'ai trouvée pour piéger un événement load était d'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);
13
répondu tbjers 2016-12-04 10:44:47

vous devez maintenant utiliser la fonction .on() pour lier des événements.

10
répondu 2015-06-01 14:43:16

voici un excellent traitement sur le réseau de développement Mozilla (MDN) de ce numéro pour le JavaScript standard (si vous ne souhaitez pas compter sur jQuery ou de mieux le comprendre en général):

https://developer.mozilla.org/en-US/docs/DOM/element.addEventListener

Voici une discussion du flux d'événement d'un lien dans le traitement ci-dessus:

http://www.w3.org/TR/DOM-Level-3-Events/#event-flow

quelques points clés sont:

  • Il permet d'ajouter plus d'un gestionnaire pour l'événement
  • cela vous donne un contrôle plus fin de la phase où l'auditeur est activé (capture vs. bulles)
  • il fonctionne sur N'importe quel élément DOM, pas seulement des éléments HTML
  • La valeur de "ce" passé à l'événement est pas l'objet global (de la fenêtre), mais l'élément à partir duquel l'élément de feu. C'est très pratique.
  • Code de l'héritage pour IE navigateurs est simple et inclus sous la rubrique "Héritage Internet Explorer et attachEvent"
  • vous pouvez inclure des paramètres si vous enfermez le gestionnaire dans une fonction anonyme
1
répondu Aeoril 2012-10-18 05:44:53