2009-02-06 16 views
112

Al utilizar jQuery de la conexión de un controlador de eventos, hay alguna diferencia entre usar el método clic

$().click(fn) 

frente utilizando el método bind

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

Aparte de parámetro de datos opcional de aprieto.

+0

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

Respuesta

134

Por lo que vale la pena, desde el jQuery source:

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

Así que no, no hay ninguna diferencia -

$().click(fn) 

llamadas

$().bind('click',fn) 
+6

Verdadero - 'click()' es básicamente la abreviatura de 'bind ('clic')' (o, en este día una edad, en realidad se llama 'en (' haga clic en ') '. De la manera en que lo veo, también puede ahorrarse esa llamada de función adicional usando' on (' click ') 'directamente. – Nix

+0

Hacen lo mismo pero bind() digamos, quiero algo para suceda cuando el uso se desplace Y haga clic, etc. Vea http://stackoverflow.com/a/519455/292408 a continuación para el ejemplo. Por supuesto, solo puede enlazar a un evento, por ejemplo, 'clic' también. –

7

Hay una diferencia en la que se puede enlazar eventos personalizados utilizando la segunda forma que tiene. De lo contrario, parecen ser sinónimos. Ver: jQuery Event Docs

95

+1 para la respuesta de Mateo , pero pensé que debería mencionar que también puedes enlazar más de un evento h Andler de una sola vez usando bind

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

que es el mucho más limpio equivalente a:

var myFunc = function() { 
    $(this).addClass('focus'); 
}; 
$('#myDiv') 
    .mouseover(myFunc) 
    .focus(myFunc) 
; 
+19

+1 Que el enlace de varios eventos es nuevo para mí y posiblemente bastante útil. – cletus

+1

Sí, es genial saberlo. –

1

Existe la [data] parámetro de bind que ocurrirá solamente en bind-tiempo, una vez.

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

0

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

usted encontrará que tratan las maneras ambos conducen al mismo resultado, por lo que son equivalentes.

0

I prefieren .bind() debido a su consistencia interfaz con .live(). No solo hace que el código sea más legible, sino que hace que sea más fácil cambiar una línea de código para usar un método en lugar del otro.

1

encuentro el .click() es la forma más lógica, pero supongo que es la forma de pensar de las cosas.

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

Parece ser lo más simple posible.

Cuestiones relacionadas