Was sind in Bezug auf die Leistung die Gewinne (oder nur Unterschiede) zwischen:
$('.myEl').click();
und
$('.myEl').trigger('click');
Gibt es überhaupt welche?
Was sind in Bezug auf die Leistung die Gewinne (oder nur Unterschiede) zwischen:
$('.myEl').click();
und
$('.myEl').trigger('click');
Gibt es überhaupt welche?
Antworten:
Dies ist der Code für die clickMethode :
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 dataund fnin die .onFunktion 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 an
jQuery.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;
}
});
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').
click()geschrieben wurde als jquery.fn.click = function() { return trigger("click") }, aber es ist nicht (siehe Antwort von @andlrc). Vor click()potenziellen Aufrufen wird Code ausgeführt trigger("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 habe trigger("click")Werke verwendet, wo click()dies nicht der Fall war .
Überprüfen Sie http://api.jquery.com/click/ :
Wenn in der dritten Variante .click () ohne Argumente aufgerufen wird, ist dies eine Verknüpfung für .trigger ("click").
Es scheint, dass sie gleich sind.