jQuery优点/差异.trigger()vs .click()

ben*_*e89 68 jquery

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

$('.myEl').click();
Run Code Online (Sandbox Code Playgroud)

$('.myEl').trigger('click');
Run Code Online (Sandbox Code Playgroud)

有没有?

and*_*lrc 57

这是该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");
}
Run Code Online (Sandbox Code Playgroud)

如你看到的; 如果没有参数传递给函数,它将触发click事件.


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

正如@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");
}
Run Code Online (Sandbox Code Playgroud)

  • @Graeck我很确定你在那段代码中有错误......因为你所说的所有逻辑点都是胡说八道......对不起.. (2认同)

Nic*_*tti 5

我觉得

$('.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)