Ik probeer het jQuery-equivalent van deze JavaScript-methode te vinden:
document.addEventListener('click', select_element, true);
Ik heb zo ver gekomen als:
$(document).click(select_element);
Maar dat bereikt niet hetzelfde resultaat, als de laatste parameter van de JavaScript-methode – een Boolean die aangeeft of de gebeurtenishandler moet worden uitgevoerd in de vastleggen of borrelende fase (per mijn begrip van http://www.quirksmode.org/js/events_advanced.html ) – is weggelaten.
Hoe geef ik die parameter op of bereik anders dezelfde functionaliteit, met behulp van jQuery?
Antwoord 1, Autoriteit 100%
Niet alle browsers ondersteunen gebeurtenis vastleggen (bijvoorbeeld Internet Explorer-versies van minder dan 9 niet), maar allemaal ondersteunen de gebeurtenisborrelen, daarom is het de fase die wordt gebruikt om handlers te binden aan evenementen in alle cross-browserabstracties, JQuery’s inbegrepen.
Het dichtst bij wat u zoekt in jQuery is het gebruik van bind()
(vervangen door on()
in jQuery 1.7+) of De evenementenspecifieke jQuery-methoden (in dit geval, click()
, Welke oproepen bind()
Intern toch). Alles gebruiken de borrelende fase van een verhoogd evenement.
Antwoord 2, Autoriteit 80%
Vanaf JQuery 1.7, .on()
is nu de voorkeursmethode voor bindende gebeurtenissen, in plaats van .bind()
:
Van http://api.jquery.com/bind/:
Vanaf jQuery 1.7 is de .on() methode de voorkeursmethode voor
gebeurtenishandlers aan een document koppelen. Voor eerdere versies, de
.bind() methode wordt gebruikt voor het direct koppelen van een gebeurtenishandler aan
elementen. Handlers zijn gekoppeld aan de momenteel geselecteerde elementen in
het jQuery-object, dus die elementen moeten bestaan op het punt van de aanroep
to .bind() gebeurt. Voor meer flexibele evenementbinding, zie de discussie
van gebeurtenisdelegatie in .on() of .delegate().
De documentatiepagina bevindt zich op
http://api.jquery.com/on/
Antwoord 3, autoriteit 37%
De bindfunctie komt het dichtst in de buurt:
$('#foo').bind('click', function() {
alert('User clicked on "foo."');
});
Antwoord 4, autoriteit 10%
Een ding om op te merken is dat jQuery-gebeurtenismethoden load
niet activeren/vangen op embed
-tags die SVG DOM bevatten die als een afzonderlijk document in de embed
-tag. De enige manier die ik vond om een load
-gebeurtenis hierop te vangen, was door onbewerkt JavaScript te gebruiken.
Dit werkt niet (ik heb de methoden on
/bind
/load
geprobeerd):
$img.on('load', function () {
console.log('FOO!');
});
Dit werkt echter:
$img[0].addEventListener('load', function () {
console.log('FOO!');
}, false);
Antwoord 5, autoriteit 9%
U moet nu de functie .on()
gebruiken om gebeurtenissen te binden.
Antwoord 6, autoriteit 5%
$( "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>
Antwoord 7
Hier is een uitstekende behandeling op het Mozilla Development Network (MDN) van dit probleem voor standaard JavaScript (als u niet op jQuery wilt vertrouwen of het in het algemeen beter wilt begrijpen):
https://developer.mozilla.org/en-US/ docs/DOM/element.addEventListener
Hier is een bespreking van de gebeurtenissenstroom via een link in de bovenstaande behandeling:
http://www.w3.org/TR /DOM-Level-3-Events/#event-flow
Enkele belangrijke punten zijn:
- Hiermee kunt u meer dan één handler voor een gebeurtenis toevoegen
- Het geeft je een fijnmazigere controle over de fase waarin de luisteraar wordt geactiveerd (vastleggen versus borrelen)
- Het werkt op elk DOM-element, niet alleen op HTML-elementen
- De waarde van “this” die aan de gebeurtenis wordt doorgegeven, is niet het globale object (venster), maar het element van waaruit het element wordt geactiveerd. Dit is erg handig.
- Code voor oudere IE-browsers is eenvoudig en opgenomen onder de kop “Legacy Internet Explorer en attachEvent”
- U kunt parameters opnemen als u de handler in een anonieme functie plaatst