65 votes

Comment obtenir un tableau avec jQuery, plusieurs <input> avec le même nom

J'ai un formulaire où les utilisateurs peuvent ajouter des champs de saisie avec jQuery.

<input type="text" id="task" name="task[]" />

Après avoir soumis le formulaire, j'obtiens un tableau en PHP.

Je veux gérer cela avec le $.ajax() mais je n'ai aucune idée de comment transformer mon <input> à un tableau dans jQuery.

Merci d'avance.

124voto

Kobi Points 65357

Utilisation de carte :

var values = $("input[id='task']")
              .map(function(){return $(this).val();}).get();

Si vous modifiez ou supprimez l'id (qui doit être unique), vous pouvez également utiliser le sélecteur $("input[name='task\\[\\]']")

Exemple de travail : http://jsbin.com/ixeze3

0 votes

Cela fonctionne bien avec les 1,2,3 donc je vais utiliser cela avec la fonction explode de php pour que cela soit réglé merci @tous pour votre aide

1 votes

@x4tje - pas de problème. Vous n'êtes pas obligé d'utiliser explode - notez que values est un tableau, pas une chaîne. Cela dépend de la façon dont vous faites votre appel AJAX, ou bien sûr.

0 votes

Pourquoi avons-nous besoin .get() pour ?

35voto

Sarfraz Points 168484

Pour les éléments multiples, vous devez leur donner une classe plutôt qu'un identifiant, par exemple :

<input type="text" class="task" name="task[]" />

Vous pouvez maintenant les obtenir en utilisant jquery, comme ceci :

$('.task').each(function(){
   alert($(this).val());
});

0 votes

@Sarfraz s'il vous plaît vérifiez-le codepen.io/sidaurukfreddy/pen/XNroJW comment puis-je éviter que le code-barres ait la même valeur ? merci.

17voto

Mailslut Points 1538

Tout d'abord, vous ne devez pas avoir plusieurs éléments avec le même ID sur une page - l'ID doit être unique.

Vous pourriez simplement supprimer l'attribut id et le remplacer par :

<input type='text' name='task'>

et pour obtenir un tableau des valeurs de la tâche faites

var taskArray = new Array();
$("input[name=task]").each(function() {
   taskArray.push($(this).val());
});

10voto

fxs Points 31

Pour récupérer le tableau des noms, je l'utilise :

$("input[name*='task']")

0 votes

C'est en fait la meilleure réponse ici.

9voto

rahul Points 84185

Vous ne pouvez pas utiliser le même identifiant pour plusieurs éléments dans un document. Gardez les ids différents et le même nom pour les éléments.

<input type="text" id="task1" name="task" />
<input type="text" id="task2" name="task" />
<input type="text" id="task3" name="task" />
<input type="text" id="task4" name="task" />
<input type="text" id="task5" name="task" />

var newArray = new Array();

$("input:text[name=task]").each(function(){
    newArray.push($(this));
});

2 votes

@rahul : cela ne marchera pas car il s'agit de plusieurs zones de texte et non d'une seule. Si vous connaissez PHP, remarquez le nom de la zone de texte task[] ce qui signifie qu'il est censé y avoir plus d'une zone de texte.

2 votes

@rahul : votre mise à jour n'aidera pas encore en termes de fabrication de tableau php qui peut être fait si le [] est suffixé par le nom du champ.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X