2009-10-25 14 views
6

Me preguntaba cuál de los métodos anteriores es el preferido o es la pauta general que usa $ (elem) .click() para cosas simples y < a onclick = "func (1, 2, 3, 4);" > cuando necesita pasar parámetros a la secuencia de comandos cuando se hace clic en el elemento? He intentado usar solo $ (elem) .click() para mantener el código limpio y simple, pero cuando tienes que pasar más de un parámetro se vuelve complicado y llamar a la función onclick = "" parece una solución mejor .onclick = "func()" o .click()?

Respuesta

5
$(elem).click(function() { 
    func(1,2,3,4); 
}); 

Parece lo que quieres, ¿no?

+0

Pero si los parámetros pasados ​​a la función son únicos para cada elemento y que pueden tener cientos de estos elementos, se vuelve más complicado que hacerlo de esta manera, así que por eso me preguntaba si en esos casos deberías e el método onclick = "func (1, 2, 3, 4)" o debería quedarse con $ (elem) .click(). Por supuesto, podría poner todos esos parámetros en la cadena de consulta url como foo = 1 & bar = 2 y poner eso en href = "" y en $ (elem) .click() usar $ (this) .href() para obtener los valores , pero ¿es más eficiente hacer onclick = "func()"? – TheMagician

+1

bien, entonces debería usar los atributos de datos html5 para establecer valores únicos asociados con cada elemento relevante: 'link' – geowa4

+2

Si tiene cientos de estos elementos, la forma más eficiente es usar [event delegation] [http: //www.danwebb. net/2008/2/8/event-delegation-made-easy-in-jquery] en lugar de manejadores onclick individuales para cada elemento. Para mantener el JS menos mezclado con su HTML, puede almacenar los parámetros necesarios en una estructura de datos de Javascript, con claves para cada objeto que sea el elemento ID o similar. –

3

Prefiero usar $ (elem) .click() para mantener mi HTML libre de javascript, lo considero más limpio.

7

Una de las principales ideas detrás de jQuery es la javascript discreta (es decir, HTML y javascript son dos grandes sabores que no saben muy bien juntos). Usar el objeto jQuery y los selectores para adjuntar las funciones es lo que preferirían que hicieras.

4

Si los parámetros se pudo determinar en el momento del clic, sugeriría el método de unión:

$('a').click(function(){ someFunc(this.val, 2, 3, 4); }) 

Uno de los casos lo que podía pensar de hacerlo en línea, es que si usted está construyendo múltiples enlaces en un bucle donde params 1, 2, 3 o 4 están variando de acuerdo a una variable backend o algo:

<% for(int i = 0; i < 4; i++) { %> 
    <a onclick="someFunc(1,<%= i %>,3,4"></a> 
<% } %> 

en lo personal, siempre trato de unirse al evento en un $ (document) ready() llamar de vuelta.

Esperanza esto ayuda

0

Puede pasar parámetros a una función cuando se utiliza jQuery:

$(".selector").click(function() { func(1,"2", someVar); }); 

Yo prefiero usar siempre jQuery para el manejo de mi caso. No me gusta poner ningún comportamiento en mi HTML, incluso con onclick y eventos relacionados.

Además, si programáticamente hace clic en algo usando $(".selector").click() y tiene un controlador conectado usando tanto onclick como jQuery, primero llamará al manejador jQuery y luego al manejador se establecerá utilizando el atributo. Pero si haces clic con el mouse, es al revés. Eso podría ser inesperado, y terminará dándote dolores de cabeza en el futuro.

2

me gustaría ir con la click() así, si tiene parámetros adicionales que quiera pasar a la función, añadirlos a cualquiera de los atributos del objeto, que suelen utilizar rel así:

<a href="#" class="link" rel="parameter1, parameter2, etc">Link</a> 

en la secuencia de comandos se puede hacer esto:

$('.link').click(function() { 
var parameters = $(this).attr('rel').split(','); 
// Do something 
return false; 
})