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


72

在性能方面,以下各项之间有哪些收益(或仅仅是区别):

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

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

有没有?

Answers:


61

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

如你看到的; 如果没有参数传递给该函数,它将触发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");
}

1
只是添加...我最近尝试使用.click(),如果在Chrome中失败(在FF和Safari中工作正常)。我改用.trigger('click'),然后在Chrome中也可以使用。
Graeck

2
@Graeck我很确定您在该代码中有一个错误....使所有逻辑点都在您所说的是废话...对不起..
andlrc 2013年

1
@Graeck我也遇到过同样的事情,这.click().bind()旧版本jQuery的快捷方式,这可能就是为什么..
Cooper Maruyama

5

我觉得

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

3

性能样。检查这里.. 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()没有使用作品的情况下使用了作品。
肖恩·肯德尔

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.