jQuery在.trigger()与.click()方面的优势/差异

jQuery在.trigger()与.click()方面的优势/差异,jquery,Jquery,就绩效而言,以下各项之间的收益(或差异)是什么: 及 有吗?检查: 在第三种变体中,当在没有参数的情况下调用.click()时 是.trigger(“单击”)的快捷方式 它们似乎是一样的。有关性能类型,请查看此处。。 两者几乎相同…click()是触发器(“click”)的缩写。我认为 $('.myEl').trigger('click'); 更好,因为它将函数调用保存为$('.myEl')。单击()只调用该函数。查看jQuery源代码中的代码 jQuery.each( ("blur focu

就绩效而言,以下各项之间的收益(或差异)是什么:

有吗?

检查:

在第三种变体中,当在没有参数的情况下调用.click()时 是.trigger(“单击”)的快捷方式


它们似乎是一样的。

有关性能类型,请查看此处。。 两者几乎相同…click()是触发器(“click”)的缩写。

我认为

$('.myEl').trigger('click');
更好,因为它将函数调用保存为
$('.myEl')。单击()只调用该函数。查看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;
    }
});
:

如你所见;如果没有参数传递给函数,它将触发click事件


使用
.trigger(“click”)
将少调用一个函数

正如@Sandeep在他的
中指出的那样,触发器(“点击”)
更快:


:


只是想补充一下。。。我最近尝试在Chrome中使用.click()和if失败(在FF和Safari中运行良好)。我切换到使用.trigger('click'),然后它也在Chrome中工作。@Graeck我很确定您在代码中有错误。。。。因为你说的所有逻辑点都是胡说八道。。。抱歉..@Graeck我也经历过同样的事情,
。click()
是较旧版本jQuery中
.bind()
的快捷方式,这可能就是为什么..事实并非如此。如果说它是简写的话,就意味着
click()
被写成
jquery.fn.click=function(){return trigger(“click”)}
,但事实并非如此(参见@andlrc的答案)。在
click()
可能调用
trigger(“click”)
之前运行了一些代码,这显然是一个足够长的等待时间,让FireFox确定click事件是以编程方式应用的,并且不会执行它<代码>触发(“单击”)
比原来快了几分之一秒。我刚刚遇到了@Graeck在他们的评论中提到的相同问题,使用
trigger(“click”)
有效,而
click()
无效。
$('.myEl').trigger('click');
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;
    }
});
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");
}
$.fn.click = function (data, fn) {
    return arguments.length > 0 ? this.on("click", null, data, fn) : this.trigger("click");
}