在性能方面,以下各项之间有哪些收益(或仅仅是区别):
$('.myEl').click();
和
$('.myEl').trigger('click');
有没有?
在性能方面,以下各项之间有哪些收益(或仅仅是区别):
$('.myEl').click();
和
$('.myEl').trigger('click');
有没有?
Answers:
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")速度更快:
$.fn.click = function (data, fn) {
return arguments.length > 0 ? this.on("click", null, data, fn) : this.trigger("click");
}
.click()是.bind()旧版本jQuery的快捷方式,这可能就是为什么..
我觉得
$('.myEl').trigger('click');
更好,因为它可以节省您的函数调用,$('.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;
}
});
性能样。检查这里.. http://jsperf.com/trigger-vs-not-trigger 两者都是几乎一样的... ...点击()是触发的简写(“点击”)。
click()则表示它写为jquery.fn.click = function() { return trigger("click") },但不是(请参阅@andlrc的答案)。在click()潜在调用之前trigger("click"),有一些代码正在运行,这显然需要等待足够长的时间,FireFox才能确定click事件是通过编程方式应用的,并且不会接受。 trigger("click")是几分之一秒的速度。我只是遇到@Graeck在他们的评论中提到的相同问题,并trigger("click")在click()没有使用作品的情况下使用了作品。