jQuery: $ (). click (fn) vs. $ (). bind ('click', fn);

115

Al usar jQuery para conectar un controlador de eventos, ¿hay alguna diferencia entre usar el método de clic?

$().click(fn)

versus usar el método de vinculación

$().bind('click',fn);

Aparte del parámetro de datos opcional de bind.

Alan Storm
fuente
Parece que el clic también tiene el parámetro de datos opcional. ¿Alguien sabe si hay alguna diferencia entre cómo funciona? Fuente: api.jquery.com/click
Nick Udell

Respuestas:

137

Por lo que vale, de la fuente jQuery :

jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
    "mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave," +
    "change,select,submit,keydown,keypress,keyup,error").split(","), function(i, name){

    // Handle event binding
    jQuery.fn[name] = function(fn){
        return fn ? this.bind(name, fn) : this.trigger(name);
    };
});

Entonces no, no hay diferencia -

$().click(fn)

llamadas

$().bind('click',fn)
Mateo Maravillas
fuente
6
Verdadero: click()es básicamente una abreviatura de bind('click')(o, en este día, una época, en realidad llama on('click'). A mi modo de ver, también podría ahorrarse esa llamada de función adicional usando on('click')directamente.
Nix
Hacen lo mismo pero bind () digamos, quiero que suceda algo cuando el uso se desplaza Y hace clic, etc. Consulte stackoverflow.com/a/519455/292408 a continuación para ver el ejemplo. Por supuesto, solo puede vincularse a un evento, por ejemplo, "hacer clic" también.
Elijah Lynn
98

+1 para la respuesta de Matthew, pero pensé que debería mencionar que también puede vincular más de un controlador de eventos de una vez usando bind

$('#myDiv').bind('mouseover focus', function() {
    $(this).addClass('focus')
});

que es el equivalente mucho más limpio a:

var myFunc = function() {
    $(this).addClass('focus');
};
$('#myDiv')
    .mouseover(myFunc)
    .focus(myFunc)
;
nickf
fuente
20
+1 Que la vinculación de múltiples eventos es una novedad para mí y posiblemente bastante útil.
cletus
7

Hay una diferencia en que puede vincular eventos personalizados utilizando el segundo formulario que tiene. De lo contrario, parecen ser sinónimos. Ver: jQuery Event Docs

Nickohrn
fuente
1

Existe el parámetro [datos] de vinculación que se producirá solo en el momento de vinculación, una vez.

También puede especificar eventos personalizados como primer parámetro de enlace.

Aaron
fuente
1

Creo que .click () es mucho más lógico, pero supongo que así es como piensas las cosas.

$('#my_button').click(function() { alert('BOOM!'); });

Parece ser tan simple como parece.

JedH
fuente
0

Si tiene Google Chrome, sus herramientas de desarrollo tienen una herramienta de escucha de eventos, seleccione el elemento que desea espiar su evento.

Descubrirá que probar las dos formas conduce al mismo resultado, por lo que son equivalentes.

Omar Abid
fuente
0

Prefiero .bind () debido a la coherencia de su interfaz con .live () . No solo hace que el código sea más legible, sino que también facilita el cambio de una línea de código para usar un método en lugar del otro.

danorton
fuente