Что касается производительности, каковы выгоды (или только различия) между:
$('.myEl').click();
и
$('.myEl').trigger('click');
Есть ли вообще?
Что касается производительности, каковы выгоды (или только различия) между:
$('.myEl').click();
и
$('.myEl').trigger('click');
Есть ли вообще?
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");
}
как вы можете видеть; если аргументы не передаются функции, это вызовет событие click.
Использование .trigger("click")
вызовет одну меньшую функцию.
И как @Sandeep указал в ответе .trigger("click")
быстрее:
Начиная с версии 1.9.0 проверка на data
и fn
была перенесена в функцию .on
:
$.fn.click = function (data, fn) {
return arguments.length > 0 ? this.on("click", null, data, fn) : this.trigger("click");
}
для вида производительности .check здесь. http://jsperf.com/trigger-vs-not-trigger Оба являются почти такими же... click() является сокращением триггера ('click').
Я думаю, что
$('.myEl').trigger('click');
лучше, потому что он экономит вам вызов функции, поскольку $('.myEl').click();
просто вызывает это funciton. Посмотрите на код из источника jQuery
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;
}
});
Отметьте http://api.jquery.com/click/:
В третьем варианте, когда .click() вызывается без аргументов, он является ярлыком для .trigger("click").
Кажется, они одинаковы.