2011-11-06 21 views
9

Ho 3 oggetti jQuery:Associare una funzione su più elementi in una sola volta jQuery

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

E voglio associare un evento di "cambiamento" a tutti loro in una volta, ma non riesco :(

$(a, b, c).bind('paste input change', function(){ ... }); semplicemente non funziona ...

Ma se si legano a ogni elemento separatamente funziona:

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

È possibile farlo in un modo più breve?

(E senza passare le classi come selettori)

+0

Avete provato '$ ('. el1, .el2, .el3'). bind'? –

+0

sì e so che funziona, ma non voglio farlo perché gli oggetti sono usati in altri posti e non mi piace lavorare con le classi attraverso l'intero script. Mi piace usarli solo all'inizio :) (ad esempio, se cambio le classi non devo cercare tutti gli script) – Alex

risposta

22

Uso .add()[docs]:

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

tx, era quello che mi serviva: D – Alex

+0

Dovresti contrassegnarlo come risposta. – erturne

2

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

Un'altra soluzione è quello di combinare in un secondo momento:

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

d.bind(.... 

E se non ti piace che o, se si desidera chiamare la lega separati dopo tutto, è possibile scegliere di dichiarare una funzione denominata una volta, e fare riferimento a questo, invece di dichiarare la stessa funzione inline anonima per tre volte.

+0

la funzione viene realmente dichiarata 3 volte? – Alex

+0

Beh, probabilmente c'è qualche ottimizzazione per evitarlo, ma almeno sarebbe analizzato tre volte e controllato con un hash di funzioni esistenti per vedere se è lo stesso. – GolezTrol

+1

Un errore comune con il metodo '.add()' è che NON aggiunge l'elemento all'oggetto jQuery corrente. Restituisce un nuovo oggetto jQuery con esso aggiunto. Quindi hai bisogno di 'd = d.add (b)' per aggiungere 'b' a' d'. – jfriend00

3

Prova questa:

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

$ ([a, b, c]) si legano dovrebbe funzionare, come in:.

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

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