2011-11-06 36 views
9

tengo 3 objetos jQuery:Enlazar una función de varios elementos a la vez jQuery

var a = $('.el1'); 
var b = $('.el2'); 
var c = $('.el3'); 

Y quiero enlazar un evento de "cambio" a todos ellos a la vez, pero no puedo :(

$(a, b, c).bind('paste input change', function(){ ... }); simplemente no funciona ...

Pero si se unen a cada elemento por separado funciona:

a.bind('...'); 
b.bind('...'); 
c.bind('...'); 

¿Es posible hacer esto de una manera más corta?

(Y sin pasar a las clases como selectores)

+0

usted tiene intentado '$ ('. el1, .el2, .el3'). bind'? –

+0

sí y sé que funciona, pero no quiero hacer eso porque los objetos se usan en otros lugares y no me gusta trabajar con clases a lo largo de todo el guión. Me gusta usarlos solo al principio :) (por ejemplo, en caso de que cambie las clases, no tengo que buscar todas las secuencias de comandos) – Alex

Respuesta

22

Uso .add()[docs]:

a.add(b).add(c).bind(... 
+0

tx, eso era lo que necesitaba: D – Alex

+0

Debe marcar esto como su respuesta. – erturne

2

Uso $('.el1, .el2, .el3').bind(.....

Otra solución es la combinación de ellos más adelante:

var d = a; 
d.add(b); 
d.add(c); 

d.bind(.... 

Y si no te gusta que, o bien, si desea llamar a los lazos separados después de todo, se puede optar por declarar una función llamada una vez, y refiérase a eso, en lugar de declarar la misma función en línea anónima tres veces.

+0

¿realmente la función se declara 3 veces? – Alex

+0

Bueno, probablemente haya alguna optimización para evitar eso, pero al menos se analizará tres veces y se comparará con un hash de funciones existentes para ver si es el mismo. – GolezTrol

+1

Un error común con el método '.add()' es que NO agrega el elemento al objeto jQuery actual. Devuelve un nuevo objeto jQuery con el agregado. Entonces necesitas 'd = d.add (b)' para agregar 'b' a' d'. – jfriend00

3

Prueba esto:

$('.el1, .el2, .el3').bind(....) 
6

$ ([a, b, c]) se unen debería funcionar, como en:.

var a = $('.el1'); 
var b = $('.el2'); 
var c = $('.el3'); 

$([a,b,c]).each(function(idx){ 
    $(this).bind('click', function(){ 
     alert($(this).text()); 
    }); 
}); 
Cuestiones relacionadas