2009-05-05 11 views
1

J'essaie d'utiliser ce code:Comment analyser une variable Javascript

var field="myField"; 
vals[x]=document.myForm.field.value; 

Dans le code html je

<form name="myForm"> 
    <input type='radio' name='myField' value='123' /> 123 
    <input type='radio' name='myField' value='xyz' /> xyz 
</form> 

Mais cela me donne l'erreur:

document.myForm.field is undefined 

Comment puis-je traiter field comme une variable plutôt qu'un champ?

Répondre

7

Si l'on suppose que votre syntaxe autre est correcte (je havne't vérifié), cela fera ce que vous voulez:

var field="myField"; 
vals[x]=document.myForm[field].value; 

Dans JS, l'opérateur de parenthèse est un accesseur get-propriété-par-nom. Vous pouvez en savoir plus à ce sujet here.

+1

Vous pouvez accéder à la propriété d'un objet avec la notation des points aussi bien. Vous ne devez utiliser l'opérateur de support que lorsque le nom de la propriété est un mot réservé ou que vous ne pouvez pas indiquer explicitement le nom de la propriété. –

3

utiliser les éléments [] collection

document.forms['myForm'].elements[field] 

elements collection in DOM spec

BTW. Si vous avez deux champs avec le même nom, pour obtenir la valeur d'un champ, vous devez lire:

var value = document.forms['myForm'].elements[field][index_of_field].value 

par exemple.

var value = document.forms['myForm'].elements[field][0].value 

et, si vous voulez obtenir la valeur du bouton radio sélectionné, vous devez vérifier que l'on est sélectionné

var e = document.forms['myForm'].elements[field]; 
var val = e[0].checked ? e[0].value : e[1].checked ? e[1].value : null; 
2

Vous devez faire comme ceci:

var field = "myField"; 
vals[x] = document.myForm[field].value; 

ou même

vals[x] = document.forms.myForm.elements[field].value; 
+0

Ça a marché, mais ça ne me donne pas la valeur de la radio que j'avais choisie, ça donne les deux radios. –

0

Sur la base de vos tags, il semble que vous utilisez jQuery. Si oui, vous pouvez simplement le faire et il vous rendra la vie beaucoup plus facile:

var vals = new Array(); 
$("form[name='myForm'] :radio").each(function() { 
    vals.push($(this).val()); 
}); 

:-D

Questions connexes