2010-06-09 12 views
6

Fondamentalmente, sto cercando di raccogliere gli ID di ogni elemento con una classe specifica e posizionare tali ID in una matrice. Sto usando jQuery 1.4.1 e ho provato a usare .each(), ma in realtà non lo capisco o come passare la matrice fuori dalla funzione.jQuery .each() con matrice

Sono sicuro che sono lontano, dato che sono abbastanza nuovo in questo, quindi qualsiasi aiuto di consigli sarebbe fantastico. Grazie!

+0

Se la chiamata AJAX è * all'interno * del gestore, questo deve essere corretto. Se si chiama un'altra funzione, è necessario passare il datearray come argomento o semplicemente creare la variabile all'esterno del gestore. Vedi la mia risposta qui sotto. – user113716

risposta

0

Mi sembra tutto buono, la matrice verrà popolata e sarà disponibile dove hai inserito il commento. Abbi fede in te stesso.

12

È possibile utilizzare map() troppo:

$('a#submitarray').click(function(){ 

    var datearray = $('selected').map(function(_, elem) { 
    return elem.id; 
    }).get(); // edited to add ".get()" at the end; thanks @patrick 
    // ajax 

}); 

Il metodo map() passa ogni indice (che il mio esempio non usa) e l'elemento nella funzione data, e costruisce una matrice per te dai valori di ritorno.

+2

@Pointy - I loooove 'map()'! Basta non dimenticare di concatenare '.get()' alla fine, altrimenti 'datearray' conterrà un oggetto jQuery invece della sola matrice. – user113716

+0

Oh giusto; grazie @patrick! Non vuoi che jQuery abbia avuto una "riduzione" anche nel core? – Pointy

+0

@Pointy - Sai, l'unica volta in cui mi sono imbattuto (o pensato) è stato quando ho iniziato ad armeggiare con CouchDB un po '. È un po 'interessante di funzionalità. – user113716

4

Prova con la funzione di jQuery map:

datearray = $('.selected').map(function(){ 
    return $(this).attr('id'); 
}).get(); 

// use ajax to send datearray 
+0

Il codice '= new Array()' nella prima riga non è necessario. La seconda affermazione sostituisce l'array. – Greg

+0

Lo stesso commento che ho dato a Pointy. Se non si concatena '.get()' alla fine di '.map()', 'datearray' conterrà un oggetto jQuery invece del proprio array. – user113716

+0

@Greg, @patrick: buoni punti ragazzi. Grazie – Sarfraz

1

Non è necessario trasmettere la matrice alla funzione anonima perché vive nello stesso ambito.

+0

Questo è vero. Qualsiasi funzione creata all'interno di un'altra ha portata alle variabili contenenti funzioni. Pertanto, dopo ogni esecuzione, i dati saranno disponibili nel datearray e sarà possibile passare il datearray alla funzione ajax. –

0

L'array deve essere caricato; è possibile inviare al server utilizzando jQuery.post ...

$.post("process.php", datearray, function(dat) { 
    alert('Response: ' + dat); 
}); 
1

Sulla base delle altre risposte, qui è una versione semplificata:

var datearray = $('selected').map(function() { 
    return this.id; 
}).get(); 

La funzione map Ottiene l'ID di ogni elemento, e il La funzione get restituisce una matrice. All'interno della funzione anonima passata a map, this fa riferimento a ciascun elemento selezionato a turno.

Problemi correlati