jQuery在.trigger()和.click()中的优势/差异

在性能方面,以下两者之间的收益(或差异)是什么?

$('.myEl').click(); 

 $('.myEl').trigger('click'); 

有没有呢?

这是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"); } 

如你看到的; 如果没有parameter passing给函数,它将触发点击事件。


使用.trigger("click")将会调用一个较less的函数。

正如@Sandeep在他的回答中指出的那样, .trigger("click")更快:


从1.9.0开始, datafn的检查已经移到.on函数中 :

 $.fn.click = function (data, fn) { return arguments.length > 0 ? this.on("click", null, data, fn) : this.trigger("click"); } 

性能types.check这里.. http://jsperf.com/trigger-vs-not-trigger两者几乎相同;… click()是触发器('click')的简写。

我觉得

 $('.myEl').trigger('click'); 

更好,因为它为您节省了一个函数调用$('.myEl').click(); 只是称之为function。 看看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”)的快捷方式。

看来他们是一样的。