在性能方面,以下之间的收益(或差异)是什么?
$('.myEl').click();
Run Code Online (Sandbox Code Playgroud)
和
$('.myEl').trigger('click');
Run Code Online (Sandbox Code Playgroud)
有没有?
and*_*lrc 57
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");
}
Run Code Online (Sandbox Code Playgroud)
如你看到的; 如果没有参数传递给函数,它将触发click事件.
使用.trigger("click")将调用一个较少的函数.
正如@Sandeep在他的回答中 指出的.trigger("click")更快:
$.fn.click = function (data, fn) {
return arguments.length > 0 ? this.on("click", null, data, fn) : this.trigger("click");
}
Run Code Online (Sandbox Code Playgroud)
我觉得
$('.myEl').trigger('click');
Run Code Online (Sandbox Code Playgroud)
更好,因为它为您节省了函数调用,$('.myEl').click();就像调用该函数一样。查看来自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;
}
});
Run Code Online (Sandbox Code Playgroud)