309 votes

Comment puis-je vérifier si un bouton radio est sélectionné avec JavaScript ?

J'ai deux boutons radio dans un formulaire HTML. Une boîte de dialogue apparaît lorsque l'un des champs est nul. Comment puis-je vérifier si un bouton radio est sélectionné ?

0 votes

Ce lien peut vous aider stackoverflow.com/questions/6654601/

373voto

Mark Biek Points 41769

Imaginons que vous ayez du HTML comme celui-ci

<input type="radio" name="gender" id="gender_Male" value="Male" />
<input type="radio" name="gender" id="gender_Female" value="Female" />

Pour la validation côté client, voici un peu de Javascript pour vérifier lequel est sélectionné :

if(document.getElementById('gender_Male').checked) {
  //Male radio button is checked
}else if(document.getElementById('gender_Female').checked) {
  //Female radio button is checked
}

Ce qui précède pourrait être rendu plus efficace en fonction de la nature exacte de votre balisage, mais cela devrait suffire pour vous permettre de commencer.


Si vous cherchez juste à savoir si tout Le bouton radio est sélectionné partout sur la page, PrototypeJS rend les choses très faciles.

Voici une fonction qui retournera vrai si au moins un bouton radio est sélectionné quelque part sur la page. Là encore, il faudra peut-être adapter cette fonction en fonction de votre code HTML spécifique.

function atLeastOneRadio() {
    return ($('input[type=radio]:checked').size() > 0);
}

Pour la validation côté serveur (n'oubliez pas que vous ne pouvez pas dépendre entièrement de Javascript pour la validation). cela dépend de votre langue de prédilection, mais vous vérifierez que l'option gender de la chaîne de requête.

2 votes

Mais ce que je veux, c'est vérifier si un bouton radio est sélectionné indépendamment de ce qui est sélectionné.

1 votes

Je ne comprends pas vraiment ce que vous dites ? Vous vous intéressez au fait que TOUT bouton radio soit sélectionné ou non ?

0 votes

Oui. car le formulaire ne peut pas être soumis si tous les champs ne sont pas remplis, y compris les boutons radio.

130voto

Powerlord Points 43989

Avec jQuery ce serait quelque chose comme

if ($('input[name=gender]:checked').length > 0) {
    // do something here
}

Permettez-moi de le décomposer en plusieurs parties pour y voir plus clair. jQuery traite les choses de gauche à droite.

input[name=gender]:checked
  1. input le limite aux balises d'entrée.
  2. [name=gender] le limite aux étiquettes portant le nom du genre dans le groupe précédent.
  3. :checked le limite aux cases à cocher/commandes radio qui sont sélectionnées dans le groupe précédent.

Si vous voulez éviter cela, cochez l'une des cases d'option ( checked="checked" ) dans le code HTML, ce qui garantirait qu'un bouton radio est toujours sélectionné.

26 votes

-1 pour avoir proposé une bibliothèque alors que cela n'a pas été demandé. De cette façon, nous pourrions répondre à tout par "inclure la bibliothèque x, utiliser x.doWhatYouNeed()". Je pense sincèrement que l'on devrait répondre à cette question avec du javascript pur (et ensuite éventuellement montrer à quel point c'est plus facile avec une bibliothèque).

34 votes

@RiccardoGalli : Beaucoup de gens utilisent déjà jQuery, c'est pourquoi la réponse commence par "Avec jQuery, ce serait quelque chose comme" au cas où ils l'utiliseraient déjà.

1 votes

Quelqu'un sait-il s'il est possible de chaîner des sélecteurs comme ceci ? input[name=gender][type=radio] ou input[name=gender,type=radio] juste pour une validation supplémentaire ?

89voto

Russ Cam Points 58168

Une méthode JavaScript à la vanille

var radios = document.getElementsByTagName('input');
var value;
for (var i = 0; i < radios.length; i++) {
    if (radios[i].type === 'radio' && radios[i].checked) {
        // get value, set checked flag or do whatever you need to
        value = radios[i].value;       
    }
}

2 votes

J'ai presque le même problème en ce moment et votre code a été très utile.

2 votes

Vous obtiendrez ainsi la valeur du dernier bouton radio coché. Si vous avez plusieurs groupes de boutons radio, vous n'obtiendrez probablement pas la valeur correcte.

0 votes

@styfle Cela fonctionne très bien pour la question de l'OP où il indique qu'il n'y a que deux boutons radio dans un formulaire sur la page. La solution serait différente pour un autre scénario de problème, comme plus de deux boutons radio, plusieurs groupes de radio, etc :)

12voto

Amit sharma Points 51

Code HTML

<input type="radio" name="offline_payment_method" value="Cheque" >
<input type="radio" name="offline_payment_method" value="Wire Transfer" >

Code Javascript :

var off_payment_method = document.getElementsByName('offline_payment_method');
var ischecked_method = false;
for ( var i = 0; i < off_payment_method.length; i++) {
    if(off_payment_method[i].checked) {
        ischecked_method = true;
        break;
    }
}
if(!ischecked_method)   { //payment method button is not checked
    alert("Please choose Offline Payment Method");
}

2 votes

Avertissement : ce code renvoie l'avertissement de la popup dès le chargement de la page.

9voto

Trelamenos Points 91

Les scripts de cette page m'ont aidé à élaborer le script ci-dessous, qui me semble plus complet et universel. En gros, il validera n'importe quel nombre de boutons radio dans un formulaire, c'est-à-dire qu'il s'assurera qu'une option radio a été sélectionnée pour chacun des différents groupes radio du formulaire. Par exemple, dans le formulaire de test ci-dessous :

   <form id="FormID">

    Yes <input type="radio" name="test1" value="Yes">
    No <input type="radio" name="test1" value="No">

    <br><br>

    Yes <input type="radio" name="test2" value="Yes">
    No <input type="radio" name="test2" value="No">

   <input type="submit" onclick="return RadioValidator();">

Le script RadioValidator script s'assurera qu'une réponse a été donnée à la fois pour 'test1' et 'test2' avant de le soumettre. Vous pouvez avoir autant de groupes de radio dans le formulaire, et il ignorera tous les autres éléments du formulaire. Toutes les réponses manquantes s'afficheront dans une seule fenêtre d'alerte. Voilà, j'espère que cela aidera les gens. Toute correction de bogue ou modification utile est la bienvenue :)

<SCRIPT LANGUAGE="JAVASCRIPT">
function RadioValidator()
{
    var ShowAlert = '';
    var AllFormElements = window.document.getElementById("FormID").elements;
    for (i = 0; i < AllFormElements.length; i++) 
    {
        if (AllFormElements[i].type == 'radio') 
        {
            var ThisRadio = AllFormElements[i].name;
            var ThisChecked = 'No';
            var AllRadioOptions = document.getElementsByName(ThisRadio);
            for (x = 0; x < AllRadioOptions.length; x++)
            {
                 if (AllRadioOptions[x].checked && ThisChecked == 'No')
                 {
                     ThisChecked = 'Yes';
                     break;
                 } 
            }   
            var AlreadySearched = ShowAlert.indexOf(ThisRadio);
            if (ThisChecked == 'No' && AlreadySearched == -1)
            {
            ShowAlert = ShowAlert + ThisRadio + ' radio button must be answered\n';
            }     
        }
    }
    if (ShowAlert != '')
    {
    alert(ShowAlert);
    return false;
    }
    else
    {
    return true;
    }
}
</SCRIPT>

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