2012-03-12 2 views

ответ

44

This is the code for the click method:

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 отметил в своем answer.trigger("click") быстрее:


As of 1.9.0 the check for data and fn has been moved to the .on function:

$.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

+1

@Graeck У меня было то же самое со мной тоже , '.click()' был ярлыком для '.bind()' в более ранних версиях jQuery, возможно, поэтому .. –

0

Проверить http://api.jquery.com/click/:

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

Кажется, что они такие же.

2

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

+0

Это на самом деле не так. Говоря, что это сокращенная версия подразумевает, что 'click()' были написаны как 'jquery.fn.click = function() {return trigger (" click ")}', но это не так (см. Ответ by @andlrc). Перед тем, как «click»() «вызывает» триггер («click») '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''), который достаточно долго ждет, по-видимому, для FireFox, чтобы определить, что событие click применяется программно, и не будет его соблюдать. 'trigger (" click ")' является частью секунды быстрее. Я просто столкнулся с той же проблемой, о которой упоминал @Graeck в своем комментарии, и используя 'trigger (« click »)' works, где 'click()' did not. – SeanKendle

1

я думаю, что

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

лучше, потому что это экономит вам вызов функции, как $('.myEl').click(); просто вызывает эту Funciton. Посмотрите на код из исходного кода 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; 
    } 
});