С точки зрения производительности, каковы доходы (или просто различия) между:JQuery преимущества/различия в .trigger() против .click()
$('.myEl').click();
и
$('.myEl').trigger('click');
Есть любой вообще?
С точки зрения производительности, каковы доходы (или просто различия) между:JQuery преимущества/различия в .trigger() против .click()
$('.myEl').click();
и
$('.myEl').trigger('click');
Есть любой вообще?
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");
}
Проверить http://api.jquery.com/click/:
В третьем варианте, когда .click() вызывается без аргументов, она ярлык для .trigger ("щелчок").
Кажется, что они такие же.
для вида производительности .check здесь. http://jsperf.com/trigger-vs-not-trigger Оба почти такие же ... click() является сокращением триггера ('click').
Это на самом деле не так. Говоря, что это сокращенная версия подразумевает, что 'click()' были написаны как 'jquery.fn.click = function() {return trigger (" click ")}', но это не так (см. Ответ by @andlrc). Перед тем, как «click»() «вызывает» триггер («click») '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''), который достаточно долго ждет, по-видимому, для FireFox, чтобы определить, что событие click применяется программно, и не будет его соблюдать. 'trigger (" click ")' является частью секунды быстрее. Я просто столкнулся с той же проблемой, о которой упоминал @Graeck в своем комментарии, и используя 'trigger (« click »)' works, где 'click()' did not. – SeanKendle
я думаю, что
$('.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;
}
});
Просто для добавления ... Недавно я попробовал использовать .click(), а если не удалось в Chrome (отлично работал в FF и Safari). Я переключился на использование .trigger ('click'), а затем работал в Chrome. – Graeck
@Graeck Я уверен, что у вас есть ошибка в этом коде .... Потому что все логические точки в том, что вы говорите, нонсенс ... Извините .. – andlrc
@Graeck У меня было то же самое со мной тоже , '.click()' был ярлыком для '.bind()' в более ранних версиях jQuery, возможно, поэтому .. –