En términos de rendimiento, ¿cuáles son las ganancias (o sólo diferencias) entre:ventajas jQuery/diferencias en .trigger() vs .click()
$('.myEl').click();
y
$('.myEl').trigger('click');
¿Hay en absoluto?
En términos de rendimiento, ¿cuáles son las ganancias (o sólo diferencias) entre:ventajas jQuery/diferencias en .trigger() vs .click()
$('.myEl').click();
y
$('.myEl').trigger('click');
¿Hay en absoluto?
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");
}
como se puede ver; si no se pasan argumentos a la función, activará el evento click.
El uso de .trigger("click")
llamará a una función menos.
Y como @Sandeep señaló en su answer.trigger("click")
es más rápido:
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");
}
Comprobar http://api.jquery.com/click/:
En la tercera variación, cuando .click() es llamado sin argumentos, que es un atajo para .trigger ("clic").
Parece que son lo mismo.
para el tipo de rendimiento. Compruebe aquí ... http://jsperf.com/trigger-vs-not-trigger Ambos son casi lo mismo ... haga clic en() es la abreviatura de desencadenador ('clic').
Esto no es realmente cierto. Decir que es una abreviatura significaría que 'click()' se escribieron como 'jquery.fn.click = function() {return trigger (" click ")}', pero no lo es (ver respuesta por @andlrc). Se ejecuta cierto código antes de que 'click()' llame potencialmente a 'trigger (' click ') ', que es una espera lo suficientemente larga, aparentemente, para que FireFox determine que el evento Click se aplica programáticamente y no lo respetará. 'trigger (" click ")' es una fracción de segundo más rápido. Me encontré con el mismo problema mencionado por @Graeck en su comentario, y usando 'trigger ('click')' funciona, donde 'click()' no. – SeanKendle
Creo que
$('.myEl').trigger('click');
es mejor, ya que le ahorra una llamada de función, $('.myEl').click();
solo las llamadas que Funciton. Mirar el código fuente de 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;
}
});
Solo para agregar ... Hace poco intenté usar .click() y si fallaba en Chrome (funcionó bien en FF y Safari). Cambié a usar .trigger ('clic') y luego funcionó en Chrome también. – Graeck
@Graeck Estoy bastante seguro de que tienes un error en ese código ... Porque todos los puntos lógicos de lo que dices son tonterías ... Lo siento ... – andlrc
@Graeck. Me ha pasado lo mismo a mí también. , '.click()' era un acceso directo para '.bind()' en versiones anteriores de jQuery, eso puede haber sido el motivo. –