jQuery.click() vs onClick
Ik heb een enorme jQuery applicatie, en ik'm gebruik de onderstaande twee methoden voor klikgebeurtenissen.
Eerste methode
HTML
<div id="myDiv">Some Content</div>
jQuery
$('#myDiv').click(function(){
//Some code
});
Tweede methode
HTML
<div id="myDiv" onClick="divFunction()">Some Content</div>
JavaScript functie oproep
function divFunction(){
//Some code
}
Ik gebruik of de eerste of de tweede methode in mijn applicatie. Welke is beter? Beter voor de prestaties? En standaard?
541
3
Het gebruik van
$('#myDiv').click(function(){
is beter omdat het het standaard event registratie model volgt. (jQuery intern gebruiktaddEventListener
enattachEvent
).In principe is het registreren van een gebeurtenis op moderne manier de onopvallende manier van het afhandelen van gebeurtenissen. Ook om meer dan een event listener voor het doel te registreren kun je
addEventListener()
voor hetzelfde doel aanroepen.http://jsfiddle.net/aj55x/1/
Meer over Modern event registration -> http://www.quirksmode.org/js/events_advanced.html
Andere methoden zoals het instellen van de HTML attributen, voorbeeld:
Of DOM element eigenschappen, voorbeeld:
zijn oud en ze kunnen gemakkelijk overschreven worden.
HTML attribuut moet vermeden worden omdat het de markup groter en minder leesbaar maakt. Inhoud/structuur en gedrag zijn niet goed van elkaar gescheiden, waardoor een bug moeilijker te vinden is.
Het probleem met de DOM element properties methode is dat er maar één event handler per event aan een element gebonden kan worden.
Meer over traditionele event afhandeling -> http://www.quirksmode.org/js/events_tradmod.html
MDN referentie: https://developer.mozilla.org/en-US/docs/DOM/event
Je zou ze kunnen combineren, jQuery gebruiken om de functie te binden aan de klik
De eerste methode verdient de voorkeur. Het maakt gebruik van het geavanceerde gebeurtenisregistratiemodel[s], wat betekent dat je meerdere handlers aan hetzelfde element kunt koppelen. Je kunt gemakkelijk toegang krijgen tot het event object, en de handler kan in elke functie's scope leven. Ook is het dynamisch, d.w.z. het kan op elk moment worden aangeroepen en is bijzonder geschikt voor dynamisch gegenereerde elementen. Of je nu jQuery, een andere bibliotheek of de native methodes rechtstreeks gebruikt, maakt niet echt uit.
De tweede methode, het gebruik van inline attributen, heeft veel globale functies nodig (wat leidt tot namespace vervuiling) en mengt de inhoud/structuur (HTML) met het gedrag (JavaScript). Gebruik dat niet.
Je vraag over prestaties of standaarden kan'niet gemakkelijk beantwoord worden. De twee methoden zijn gewoon totaal verschillend, en doen verschillende dingen. De eerste is machtiger, terwijl de tweede wordt veracht (beschouwd als slechte stijl).