Преимущества / различия jQuery в .trigger () и .click () - PullRequest
67 голосов
/ 12 марта 2012

С точки зрения производительности, какие выгоды (или просто различия) между:

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

и

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

Есть ли вообще?

Ответы [ 4 ]

57 голосов
/ 12 марта 2012

Это код для 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 проверка для data и fn была перемещена в функцию .on :

$.fn.click = function (data, fn) {
    return arguments.length > 0 ? this.on("click", null, data, fn) : this.trigger("click");
}
4 голосов
/ 12 марта 2012

я думаю, что

$('.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 голосов
/ 12 марта 2012

для вида производительности. Проверьте здесь .. http://jsperf.com/trigger-vs-not-trigger Оба они почти одинаковы ... click () - это сокращение от триггера ('click').

2 голосов
/ 12 марта 2012

Чек http://api.jquery.com/click/:

В третьем варианте, когда .click () вызывается без аргументов, он это ярлык для .trigger ("click").

Кажется, они одинаковы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...