Was sind in Bezug auf die Leistung die Gewinne (oder nur Unterschiede) zwischen:
$('.myEl').click();
und
$('.myEl').trigger('click');
Gibt es überhaupt welche?
Dies ist der Code für die click
Methode :
jQuery.fn.click = function (data, fn) {
if (fn == null) {
fn = data;
data = null;
}
return arguments.length > 0 ? this.on("click", null, data, fn) : this.trigger("click");
}
Wie du siehst; Wenn keine Argumente an die Funktion übergeben werden, wird das Klickereignis ausgelöst.
Mit .trigger("click")
wird eine Funktion weniger aufgerufen.
Und wie @Sandeep in seiner Antwort hervorhob, .trigger("click")
geht es schneller:
Ab 1.9.0 wurde die Prüfung auf data
und fn
in die .on
Funktion verschoben :
$.fn.click = function (data, fn) {
return arguments.length > 0 ? this.on("click", null, data, fn) : this.trigger("click");
}
.click()
war eine Abkürzung für.bind()
in älteren Versionen von jQuery, das könnte der Grund gewesen sein ..ich denke, dass
$('.myEl').trigger('click');
ist besser, weil es Ihnen einen Funktionsaufruf erspart, da
$('.myEl').click();
nur diese Funktion aufgerufen wird. Schauen Sie sich den Code aus der jQuery-Quelle anjQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { // Handle event binding jQuery.fn[ name ] = function( data, fn ) { if ( fn == null ) { fn = data; data = null; } return arguments.length > 0 ? this.on( name, null, data, fn ) : //here they call trigger('click'); if you provide no arguments this.trigger( name ); }; if ( jQuery.attrFn ) { jQuery.attrFn[ name ] = true; } if ( rkeyEvent.test( name ) ) { jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; } if ( rmouseEvent.test( name ) ) { jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; } });
quelle
Für Performance-Art .check hier .. http://jsperf.com/trigger-vs-not-trigger Beide sind fast gleich ... click () ist eine Abkürzung für Trigger ('click').
quelle
click()
geschrieben wurde alsjquery.fn.click = function() { return trigger("click") }
, aber es ist nicht (siehe Antwort von @andlrc). Vorclick()
potenziellen Aufrufen wird Code ausgeführttrigger("click")
, was anscheinend lange genug dauert, bis FireFox feststellt, dass das Klickereignis programmgesteuert angewendet wird, und es nicht berücksichtigt.trigger("click")
ist ein Bruchteil einer Sekunde schneller. Ich bin gerade auf das gleiche Problem gestoßen, das @Graeck in ihrem Kommentar erwähnt hat, und habetrigger("click")
Werke verwendet, woclick()
dies nicht der Fall war .Überprüfen Sie http://api.jquery.com/click/ :
Es scheint, dass sie gleich sind.
quelle