2010-06-09 5 views
6

Fondamentalement, j'essaye de rassembler les identifiants de chaque élément avec une classe spécifique et de placer ces identifiants dans un tableau. J'utilise jQuery 1.4.1 et j'ai essayé d'utiliser .each(), mais je ne le comprends pas vraiment ou comment faire passer le tableau hors de la fonction. Je suis sûr que je suis loin, comme je suis assez nouveau à ce sujet, donc toute aide conseil serait génial. Merci!jQuery .each() avec Array

+0

Si l'appel AJAX est * dans * le gestionnaire, cela devrait être correct. Si vous appelez une autre fonction, vous devez transmettre datearray en tant qu'argument ou simplement créer la variable en dehors du gestionnaire. Voir ma réponse ci-dessous. – user113716

Répondre

0

Tout semble bien pour moi, le tableau sera rempli et sera disponible là où vous avez placé le commentaire. Ayez foi en vous.

12

Vous pouvez utiliser map() aussi:

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

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

}); 

La méthode map() passe chaque index (que mon exemple n'utilise pas) et élément dans la fonction donnée, et construit un tableau pour vous des valeurs de retour.

+2

@Pointy - J'adore 'map()'! N'oublie pas de chaîner '.get()' à la fin, sinon 'datearray' contiendra un objet jQuery au lieu de juste le tableau. – user113716

+0

Oh, à droite; merci @patrick! Vous ne souhaitez pas que jQuery ait une "réduction" dans le noyau aussi? – Pointy

+0

@Pointy - Vous savez, la seule fois où j'ai rencontré (ou pensé) à réduire était quand je bricolais un peu avec CouchDB. C'est un peu intéressant de fonctionnalité. – user113716

4

Essayez avec la fonction de jquery map:

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

// use ajax to send datearray 
+0

Le code '= new Array()' dans la première ligne est inutile. La deuxième déclaration remplace le tableau. – Greg

+0

Même commentaire que j'ai donné à Pointy. Si vous n'insérez pas '.get()' à la fin de '.map()', 'datearray' contiendra un objet jQuery au lieu de seulement son tableau. – user113716

+0

@Greg, @patrick: Bons points les gars. Merci – Sarfraz

1

Vous ne devez pas passer sur le tableau à la fonction anonyme, car il vit dans la même portée.

+0

C'est vrai. Toute fonction créée dans un autre a une portée pour les variables de fonctions contenant. Ainsi, après chaque exécution, vous aurez vos données dans datearray et vous pouvez simplement transmettre datearray dans votre fonction ajax. –

0

Le tableau doit être chargé; vous pouvez l'envoyer au serveur en utilisant jQuery.post ...

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

bâtiment sur les autres réponses, voici une version simplifiée:

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

La fonction map obtient l'identifiant de chaque élément, et get La fonction renvoie un tableau. Dans la fonction anonyme passée à map, this fait référence à chaque élément sélectionné à son tour.