2012-03-12 24 views

Respuesta

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

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"); 
} 
+1

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

+2

@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

+1

@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. –

0

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.

2

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').

+0

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

1

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; 
    } 
}); 
Cuestiones relacionadas