2009-01-09 7 views
1

Lorsque je soumets un formulaire en HTML, je peux transmettre un paramètre plusieurs fois, par ex.Définition d'un paramètre à valeurs multiples dans javascript

<input type="hidden" name="id" value="2"> 
<input type="hidden" name="id" value="4"> 

Puis struts je peux avoir un haricot avec la propriété String [] id, et il va remplir le tableau correctement.

Ma question est, comment puis-je faire cela en Javascript? Quand j'ai un tableau, et que je mets form.id.value = myArray, il définit simplement la valeur dans une liste séparée par des virgules. Donc, à la fin de Struts, je reçois juste un tableau à un élément, c'est-à-dire la chaîne "2,4".

Je devrais ajouter, j'ai besoin de soumettre cela sous une forme, donc je ne peux pas simplement générer une requête GET, par exemple. id = 2 & id = 4.

+0

Quel navigateur utilisez-vous? –

+0

Donc, vous générez dynamiquement ces entrées via javascript? – enobrev

+0

Eh bien, en partie. Les entrées sont définies dans le code HTML en fonction des valeurs de la soumission précédente, mais je dois ensuite les modifier lors de la soumission suivante, en extrayant les valeurs d'un objet javascript. Il peut y avoir plus ou moins de paramètres par rapport au précédent. – Markus

Répondre

2

Est-ce que vous cherchez? Il génère un champ de formulaire caché pour chaque élément d'un tableau JavaScript:

var el; 
for (var i = 0; i < myArray.length) { 
    el = document.createElement("input"); 
    el.type = "hidden"; 
    el.name = "id"; 
    el.value = myArray[i]; 

    // Optional: give each input an id so they can easily be accessed individually: 
    el.id = "hidden-myArray-" + i; 

    // Optional: give all inputs a class so they can easily be accessed as a group: 
    el.className = "hidden-myArray"; 

    form.appendChild(el); 
} 
+0

Merci, c'est ce dont j'avais besoin. Je devais juste ajouter une partie pour supprimer les anciens éléments de la soumission précédente avant de créer les nouveaux. – Markus

1

Une approche serait de donner à chaque entrée un identifiant unique: -

<input id="id1" type="hidden" name="id" value="2"> 
<input id="id2" type="hidden" name="id" value="4"> 

Puis en javascript: -

document.getElementById("id1").value = myArray[0]; 
document.getElementById("id2").value = myArray[1]; 
+0

Salut Anthony, merci pour l'idée. Cette approche fonctionnera, mais le problème est que je devrai générer les éléments dynamiquement puisque je ne sais pas combien ils seront avant de soumettre le formulaire. Ça marchera, mais je préfère une solution plus propre s'il y en a une. – Markus

+0

Il semble que j'ai dû créer les éléments dynamiquement après tout. Merci pour votre suggestion. – Markus

+0

Dans ce cas, ajoutez ce détail au texte de votre question, de sorte que la réponse acceptée corresponde mieux à la question. – AnthonyWJones

2

pas positif ce que vous essayez de faire, mais voici un go:

var inputs = document.getElementsByName('id'); 
for(var i=0; i<inputs.length; i++) { 
    var input = inputs[i]; 
    input.value = myArray[i]; 
} 

Ce itère sur toutes les entrées avec le nom 'id' et attribue la valeur correspondante à myArray.

Vous mieux être sûr myArray.length == document.getElementsByName('id').length

+0

Merci, c'est assez proche de ce dont j'avais besoin. Je devais cependant adopter une approche un peu plus compliquée, en supprimant d'abord les anciens éléments puis en en générant de nouveaux, car je ne pouvais pas m'assurer que les longueurs seraient égales. – Markus

+0

casse s'il y a des éléments avec le même nom dans d'autres formulaires (ou ailleurs) sur la page; il est préférable d'utiliser form.elements pour accéder au formulaire spécifique ... – Christoph

1

forms[0].elements.theName contient une collection de tous les éléments avec un nom attribut « theName ». Exemple:

<form> 
<input type="text" name="test"><br> 
<input type="text" name="test"> 
</form> 
<script> 
var values = ['foo', 'bar']; 
var testElements = document.forms[0].elements.test; 
for(var i = 0; i < testElements.length; ++i) 
    testElements[i].value = values[i]; 
</script> 
Questions connexes