386 votes

Comment obtenir la valeur du bouton radio sélectionné ?

J'ai un problème étrange avec mon programme JS. Je l'avais fait fonctionner correctement mais pour une raison quelconque, il ne fonctionne plus. Je veux juste trouver la valeur du bouton radio (celui qui est sélectionné) et la renvoyer à une variable. Pour une raison quelconque, il renvoie toujours undefined .

Voici mon code :

function findSelection(field) {
    var test = 'document.theForm.' + field;
    var sizes = test;

    alert(sizes);
        for (i=0; i < sizes.length; i++) {
            if (sizes[i].checked==true) {
            alert(sizes[i].value + ' you got a value');     
            return sizes[i].value;
        }
    }
}

submitForm :

function submitForm() {

    var genderS =  findSelection("genderS");
    alert(genderS);
}

HTML :

<form action="#n" name="theForm">

    <label for="gender">Gender: </label>
    <input type="radio" name="genderS" value="1" checked> Male
    <input type="radio" name="genderS" value="0" > Female<br><br>
    <a href="javascript: submitForm()">Search</A>
</form>

1 votes

578voto

Fontas Points 29

Cela fonctionne avec n'importe quel explorateur.

document.querySelector('input[name="genderS"]:checked').value;

Il s'agit d'un moyen simple d'obtenir la valeur de tout type d'entrée. Vous faites également pas doivent inclure le chemin de jQuery.

28 votes

L'utilisation de document.querySelector() est une réponse purement javascript : developer.mozilla.org/fr/US/docs/Web/API/document.querySelector

9 votes

Si vous le stockez dans une variable et qu'aucun bouton radio n'est sélectionné, le navigateur s'arrête. La console dit : TypeError document.querySelector(...) es null .

23 votes

Cela ne fonctionne que si un seul est sélectionné. Vous devez donc le vérifier avant. var selector = document.querySelector('input[name="genderS"]:checked'); if(selector) console.log(selector.value);

450voto

jbabey Points 20696

Vous pouvez faire quelque chose comme ça :

var radios = document.getElementsByName('genderS');

for (var i = 0, length = radios.length; i < length; i++) {
  if (radios[i].checked) {
    // do whatever you want with the checked radio
    alert(radios[i].value);

    // only one radio can be logically checked, don't check the rest
    break;
  }
}

<label for="gender">Gender: </label>
<input type="radio" name="genderS" value="1" checked="checked">Male</input>
<input type="radio" name="genderS" value="0">Female</input>

jsfiddle

Edit : Merci HATCHA et jpsetung pour vos suggestions d'édition.

7 votes

Cela fonctionnait pour jquery 1.7 mais maintenant la syntaxe correcte pour jQuery 1.9 est $('input[name="genderS"]:checked').val() ; (enlever le @)

1 votes

Je crois que le @ la syntaxe était déprécié encore plus tôt que cela (jquery 1.2)

0 votes

@TomPietrosanti la documentation semble être un peu erronée, jsfiddle.net/Xxxd3/608 fonctionne dans <1.7.2 mais pas dans >1.8.3. Quoi qu'il en soit, le @ doit absolument être supprimé

33voto

jptsetung Points 3204

Depuis jQuery 1.8, la syntaxe correcte de la requête est la suivante

$('input[name="genderS"]:checked').val();

Non $('input[@name="genderS"]:checked').val(); qui fonctionnait dans jQuery 1.7 (avec la fonction @ ).

9voto

Michael Laffargue Points 5190

Edit : Comme indiqué par Chips_100, vous devez utiliser :

var sizes = document.theForm[field];

directement sans utiliser la variable de test.


Vieille réponse :

Ne devriez-vous pas eval comme ça ?

var sizes = eval(test);

Je ne sais pas comment ça marche, mais pour moi, tu ne fais que copier une chaîne.

0 votes

L'évaluation n'est pas la meilleure option ici... vous pourriez dire var sizes = document.theForm[field]; et supprimer la première affectation, donc ne pas utiliser test plus de variable.

0 votes

Pour ma part, l'évaluation fonctionnerait-elle telle quelle ? Ou fonctionnerait-il uniquement avec eval('var sizes=document.theForm.' + field) ?

0 votes

La déclaration d'évaluation dans votre réponse var sizes = eval(test); pourrait fonctionner de cette façon (je viens de le tester dans firebug).

7voto

WereWolf - The Alpha Points 49671

Essayez ceci

function findSelection(field) {
    var test = document.getElementsByName(field);
    var sizes = test.length;
    alert(sizes);
    for (i=0; i < sizes; i++) {
            if (test[i].checked==true) {
            alert(test[i].value + ' you got a value');     
            return test[i].value;
        }
    }
}

function submitForm() {

    var genderS =  findSelection("genderS");
    alert(genderS);
    return false;
}

Un violon ici .

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