J'essaie de trouver l'équivalent jQuery de cet appel de méthode JavaScript:
document.addEventListener('click', select_element, true);
Je suis allé jusqu'à:
$(document).click(select_element);
mais cela n'obtient 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 (d'après ce que j'ai compris de http://www.quirksmode.org /js/events_advanced.html ) - est omis .
Comment spécifier ce paramètre ou obtenir la même fonctionnalité en utilisant jQuery?
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 bullage 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 jQuery.
Le plus proche de ce que vous recherchez dans jQuery utilise
bind()
(remplacé paron()
dans jQuery 1.7+) ou les méthodes jQuery spécifiques à l'événement (dans ce casclick()
, qui appellebind()
de toute façon en interne). Tous utilisent la phase bouillonnante d'un événement déclenché.la source
Depuis jQuery 1.7,
.on()
est désormais la méthode préférée pour lier les événements, plutôt que.bind()
:Depuis http://api.jquery.com/bind/ :
La page de documentation se trouve à l' adresse http://api.jquery.com/on/
la source
La chose la plus proche serait la fonction de liaison:
http://api.jquery.com/bind/
$('#foo').bind('click', function() { alert('User clicked on "foo."'); });
la source
Une chose à noter est que les méthodes d'événement jQuery ne déclenchent pas / ne piègent pas
load
sur lesembed
balises qui contiennent SVG DOM qui se charge comme un document séparé dans laembed
balise. Le seul moyen que j'ai trouvé pour intercepter unload
événement sur ceux-ci était d'utiliser du JavaScript brut.Cela ne fonctionnera pas (j'ai essayé les méthodes
on
/bind
/load
):$img.on('load', function () { console.log('FOO!'); });
Cependant, cela fonctionne:
$img[0].addEventListener('load', function () { console.log('FOO!'); }, false);
la source
$img
?Vous devez maintenant utiliser la
.on()
fonction pour lier des événements.la source
$( "button" ).on( "click", function(event) { alert( $( this ).html() ); console.log( event.target ); } );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <button>test 1</button> <button>test 2</button>
la source
Voici un excellent traitement sur le Mozilla Development Network (MDN) de ce problème pour le JavaScript standard (si vous ne souhaitez pas vous fier à jQuery ou mieux le comprendre en général):
https://developer.mozilla.org/en-US/docs/DOM/element.addEventListener
Voici une discussion du flux d'événements à partir d'un lien dans le traitement ci-dessus:
http://www.w3.org/TR/DOM-Level-3-Events/#event-flow
Certains points clés sont:
la source