jQuery obtenir la valeur du bouton radio sélectionné


557

L'énoncé du problème est simple. J'ai besoin de voir si l'utilisateur a sélectionné un bouton radio dans un groupe radio. Chaque bouton radio du groupe partage le même identifiant.

Le problème est que je n'ai aucun contrôle sur la façon dont le formulaire est généré. Voici un exemple de code sur l'apparence d'un code de contrôle de bouton radio:

<input type="radio" name='s_2_1_6_0' value='Mail copy to my bill to address' id = "InvCopyRadio" onchange = 'SWESubmitForm(document.SWEForm2_0,s_4,"","1-DPWJJF")' style="height:20;width:25" tabindex=1997 >

De plus, lorsqu'un bouton radio est sélectionné, il n'ajoute pas d'attribut "vérifié" au contrôle, juste le texte est coché (je suppose que la propriété vérifiée sans valeur) . Voici à quoi ressemble une radiocommande sélectionnée

<input type="radio" checked name='s_2_1_6_0' value='Mail copy to my bill to address' id = "InvCopyRadio" onchange = 'SWESubmitForm(document.SWEForm2_0,s_4,"","1-DPWJJF")' style="height:20;width:25" tabindex=1997 >

Quelqu'un peut-il m'aider avec le code jQuery qui peut m'aider à obtenir la valeur du bouton radio coché?


71
Vous avez plusieurs éléments avec le même identifiant? C'est terrible.
Matt Ball


Comment cela fonctionne-t-il avec tous ayant le même ID? Lors de l'évaluation par ID, l'évaluation ne s'arrête-t-elle pas au premier élément correspondant? Quel est le but ici sont-ils des éléments dynamiques montrés à différents moments?
Mark Carpenter Jr

1
Pour info, l'assistant @ Html.RadioButtonFor d'ASP.NET MVC générera tous les boutons radio avec le même identifiant. Oops.
Triynko

Réponses:


1120

Utilisez simplement.

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

C'est si simple.


25
N'oubliez pas les signes de citation: $ ("input [name = '" + fieldName + "']: checked"). Val ();
Atara

4
@Guraprasad Rao: C'est un code correct - les guillemets ne sont pas nécessaires dans ce cas. Essayez-le et voyez.
Stefan

2
Pourquoi cela renvoie-t-il "on" plutôt que la valeur que j'ai spécifiée dans le HTML? EDIT: Parce que je n'avais pas de guillemets autour de mes valeurs.
Vincent

3
$ ('input [name = "name_of_your_radiobutton"]: vérifié'). val ();
Sameera Prasad Jayasinghe

1
Notez que si aucun bouton n'est sélectionné, cela reviendra simplement null, ce qui est logique mais peut parfois vous dérouter lorsque vous avez l'habitude de voir ""comme valeur par défaut via l' .val()appel.
2018

313

Tout d'abord, vous ne pouvez pas avoir plusieurs éléments avec le même identifiant. Je sais que vous avez dit que vous ne pouvez pas contrôler la façon dont le formulaire est créé, mais ... essayez de supprimer en quelque sorte tous les identifiants des radios ou de les rendre uniques.

Pour obtenir la valeur du bouton radio sélectionné, sélectionnez-le par son nom avec le :checkedfiltre.

var selectedVal = "";
var selected = $("input[type='radio'][name='s_2_1_6_0']:checked");
if (selected.length > 0) {
    selectedVal = selected.val();
}

ÉDITER

Vous n'avez donc aucun contrôle sur les noms. Dans ce cas, je dirais de placer ces boutons radio dans une div, nommée, disons radioDiv, puis de modifier légèrement votre sélecteur:

var selectedVal = "";
var selected = $("#radioDiv input[type='radio']:checked");
if (selected.length > 0) {
    selectedVal = selected.val();
}

75

Le moyen le plus simple d'obtenir la valeur du bouton radio sélectionné est le suivant:

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

Aucun espace ne doit être utilisé entre les sélecteurs.


L'option la plus simple, c'est.
andreszs

44
$("#radioID") // select the radio by its id
    .change(function(){ // bind a function to the change event
        if( $(this).is(":checked") ){ // check if the radio is checked
            var val = $(this).val(); // retrieve the value
        }
    });

Assurez-vous d'envelopper dans la fonction DOM ready ( $(function(){...});ou $(document).ready(function(){...});).


Je reçois toujours une valeur vide avec ce code .. Je suppose que cela est dû au fait que je n'ai pas de propriété avec une valeur vérifiée juste un texte vérifié (je ne suis pas sûr si nous pouvons le considérer comme une propriété)
user1114212

Sélectionnez-vous le bouton radio par son ID? Avez-vous changé radioIDson ID?
Purag

37
  1. Dans votre code, jQuery recherche simplement la première instance d'une entrée avec le nom q12_3, qui dans ce cas a une valeur de 1. Vous voulez une entrée avec le nom q12_3 qui est :checked.
$(function(){
    $("#submit").click(function() {     
        alert($("input[name=q12_3]:checked").val());
    });
});
  1. Notez que le code ci-dessus n'est pas identique à l'utilisation .is(":checked"). La is() fonction de jQuery renvoie un booléen (vrai ou faux) et non un élément.

28
<input type="radio" class="radioBtnClass" name="numbers" value="1" />1<br/>
<input type="radio" class="radioBtnClass" name="numbers" value="2" />2<br/>
<input type="radio" class="radioBtnClass" name="numbers" value="3" />3<br/>

Cela renverra la valeur du bouton radio cochée.

if($("input[type='radio'].radioBtnClass").is(':checked')) {
    var card_type = $("input[type='radio'].radioBtnClass:checked").val();
    alert(card_type);
}

24
 $("input[name='gender']:checked").val()

pour les attributs imbriqués

$("input[name='lead[gender]']:checked").val()

N'oubliez pas les accolades simples pour le nom


20

Obtenez toutes les radios:

var radios = $("input[type='radio']");

Filtrez pour obtenir celui qui est vérifié

radios.filter(":checked");

OU

Une autre façon de trouver la valeur du bouton radio

var RadeoButtonStatusCheck = $('form input[type=radio]:checked').val();

3
J'utilise $('[name=your_inputs_names]:checked').val()parce qu'ils ont toujours le même nom unique
vladkras

4
Bon usage de.filter()
Mark Carpenter Jr

2
Ça .filter(). Je souhaite que cette réponse soit au sommet.
Yusril Maulidan Raji

16

Pour obtenir la valeur du bouton radio sélectionné, utilisez RadioButtonName et l'ID de formulaire contenant le RadioButton.

$('input[name=radioName]:checked', '#myForm').val()

OU par seulement

$('form input[type=radio]:checked').val();

12

Vérifiez l'exemple, cela fonctionne bien

<div class="dtl_radio">
  Metal purity : 
    <label>
    <input type="radio" name="purityradio" class="gold_color" value="92" checked="">
    92 %
  </label>
    <label>
    <input type="radio" name="purityradio" class="gold_color" value="75">
    75 %
  </label>
    <label>
    <input type="radio" name="purityradio" class="gold_color" value="58.5">
    58.5 %
  </label>
    <label>
    <input type="radio" name="purityradio" class="gold_color" value="95">
    95 %
  </label>
    <label>
    <input type="radio" name="purityradio" class="gold_color" value="59">
    59 %
  </label>
    <label>
    <input type="radio" name="purityradio" class="gold_color" value="76">
    76 %
  </label>
    <label>
    <input type="radio" name="purityradio" class="gold_color" value="93">
    93 %
  </label>
   </div>

var check_value = $('.gold_color:checked').val();


12

Voir ci-dessous pour un exemple de travail avec une collection de groupes de radio associés chacun à différentes sections. Votre schéma de dénomination est important, mais dans l'idéal, vous devriez essayer d'utiliser un schéma de dénomination cohérent pour les entrées (surtout quand elles sont dans des sections comme ici).

$('#submit').click(function(){
  var section = $('input:radio[name="sec_num"]:checked').val();
  var question = $('input:radio[name="qst_num"]:checked').val();
  
  var selectedVal = checkVal(section, question);
  $('#show_val_div').text(selectedVal);
  $('#show_val_div').show();
});

function checkVal(section, question) {
  var value = $('input:radio[name="sec'+section+'_r'+question+'"]:checked').val() || "Selection Not Made";
  return value;
}
* { margin: 0; }
div { margin-bottom: 20px; padding: 10px; }
h5, label { display: inline-block; }
.small { font-size: 12px; }
.hide { display: none; }
#formDiv { padding: 10px; border: 1px solid black; }
.center { display:block; margin: 0 auto; text-align:center; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="center">
  <div>
    <h4>Section 1</h4>

    <h5>First question text</h5>
    <label class="small"><input type="radio" name="sec1_r1" value="(1:1) YES"> YES</label>
    <label class="small"><input type="radio" name="sec1_r1" value="(1:1) NO"> NO</label>
    <br/>
    <h5>Second question text</h5>
    <label class="small"><input type="radio" name="sec1_r2" value="(1:2) YES"> YES</label>
    <label class="small"><input type="radio" name="sec1_r2" value="(1:2) NO"> NO</label>
    <br/>
    <h5>Third Question</h5>
    <label class="small"><input type="radio" name="sec1_r3" value="(1:3) YES"> YES</label>
    <label class="small"><input type="radio" name="sec1_r3" value="(1:3) NO"> NO</label>
  </div>

  <div>
    <h4>Section 2</h4>
    <h5>First question text</h5>
    <label class="small"><input type="radio" name="sec2_r1" value="(2:1) YES"> YES</label>
    <label class="small"><input type="radio" name="sec2_r1" value="(2:1) NO"> NO</label>
    <br/>
    <h5>Second question text</h5>
    <label class="small"><input type="radio" name="sec2_r2" value="(2:2) YES"> YES</label>
    <label class="small"><input type="radio" name="sec2_r2" value="(2:2) NO"> NO</label>
    <br/>
    <h5>Third Question</h5>
    <label class="small"><input type="radio" name="sec2_r3" value="(2:3) YES"> YES</label>
    <label class="small"><input type="radio" name="sec2_r3" value="(2:3) NO"> NO</label>
  </div>

  <div>
    <h4>Section 3</h4>
    <h5>First question text</h5>
    <label class="small"><input type="radio" name="sec3_r1" value="(3:1) YES"> YES</label>
    <label class="small"><input type="radio" name="sec3_r1" value="(3:1) NO"> NO</label>
    <br/>
    <h5>Second question text</h5>
    <label class="small"><input type="radio" name="sec3_r2" value="(3:2) YES"> YES</label>
    <label class="small"><input type="radio" name="sec3_r2" value="(3:2) NO"> NO</label>
    <br/>
    <h5>Third Question</h5>
    <label class="small"><input type="radio" name="sec3_r3" value="(3:3) YES"> YES</label>
    <label class="small"><input type="radio" name="sec3_r3" value="(3:3) NO"> NO</label>
  </div>
</div>


<div id="formDiv" class="center">
  <form target="#show_val_div" method="post">
    <p>Choose Section Number</p>
    <label class="small">
      <input type="radio" name="sec_num" value="1"> 1</label>
    <label class="small">
      <input type="radio" name="sec_num" value="2"> 2</label>
    <label class="small">
      <input type="radio" name="sec_num" value="3"> 3</label>
    <br/><br/>
    
    <p>Choose Question Number</p>
    <label class="small">
      <input type="radio" name="qst_num" value="1"> 1</label>
    <label class="small">
      <input type="radio" name="qst_num" value="2"> 2</label>
    <label class="small">
      <input type="radio" name="qst_num" value="3"> 3</label>
    <br/><br/>
    
    <input id="submit" type="submit" value="Show Value">
    
  </form>
  <br/>
  <p id="show_val_div"></p>
</div>
<br/><br/><br/>


12

Utiliser le code ci-dessous

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

Veuillez noter que l'attribut value doit être défini afin d'obtenir "Male" ou "Female" dans votre résultat.

<div id='div_container'>
<input type="radio" name="Gender" value="Male" /> Male <br />
<input type="radio" name="Gender" value="Female" /> Female
</div>

7

Essayez ceci avec un exemple

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1  /jquery.min.js"></script>
<form id="myForm">
<input type="radio" name="radio" value="first"/> 1 <br/>
<input type="radio" name="radio" value="second"/> 2 <br/>
</form>



<script>
$(document).ready(function () {
    $('#myForm').on('click', function () {
        var value = $("[name=radio]:checked").val();

        alert(value);
    })
});
</script>

7

Par nom uniquement

$(function () {
    $('input[name="EventType"]:radio').change(function () {
        alert($("input[name='EventType']:checked").val());
    });
});

6
if (!$("#InvCopyRadio").prop("checked") && $("#InvCopyRadio").prop("checked"))
    // do something

1
Pourquoi s'embêter à faire la comparaison des chaînes undefinedquand vous savez avec certitude que la valeur doit être checked? Il n'y a pas besoin de jQuery.
Devin Burke

Dans la question, je ne vois aucune information suggérant qu'un bouton radio sera vérifié dès le début. Je veux dire, c'est comme ça dans la plupart des cas avec des boutons radio. Donc, dans le cas où nous devions vérifier cela et qu'aucun n'était sélectionné, attr ("vérifié") retournerait un objet nul.
Tadej Magajna

C'est vrai, mais je voulais juste dire que retourner null ne causerait pas d'erreur, donc la comparaison avec "undefined"est inutile.
Devin Burke

5

Vous pouvez obtenir la valeur du bouton radio sélectionné par Id en l'utilisant dans javascript / jQuery.

$("#InvCopyRadio:checked").val();

J'espère que cela vous aidera.


très efficace !!
MHJ

4

La meilleure façon d'expliquer ce sujet simple est de donner un exemple simple et un lien de référence: -

Dans l'exemple suivant, nous avons deux boutons radio. Si l'utilisateur sélectionne un bouton radio, nous afficherons la valeur du bouton radio sélectionné dans une boîte d'alerte.

Html:

<form id="Demo">
<input type="radio" name="Gender" value="Male" /> Male <br />
<input type="radio" name="Gender" value="Female" /> Female<br />
<input type="radio" name="Gender" value="others" /> others <br />
</form>

jquery: -

 $(document).ready(function(){
        $('#Demo input').on('change', function() {
            alert($('input[name="Gender"]:checked', '#Demo').val());
        });
    });

4

Je sais que je rejoins cette fin. Mais il convient de mentionner qu'il faut

<label class="custom-control-label" for="myRadioBtnName">Personal Radio Button</label>

Et puis j'ai vérifié cela dans mon js. Ça pourrait être comme

$(document).ready(function () { 

$("#MyRadioBtnOuterDiv").click(function(){
    var radioValue = $("input[name=myRadioButtonNameAttr]:checked").val();
    if(radioValue === "myRadioBtnName"){
        $('#showMyRadioArea').show();
    }else if(radioValue === "yourRadioBtnName"){
        $('#showYourRadioArea').show();
    }
});
});

"


3
<div id="subscriptions">
 Company Suscription: <input type="radio" name="subsrad" value="1">
 Customer Subscription:<input type="radio" name="subsrad" value="2">
 Manully Set:<input type="radio" name="subsrad" value="MANUAL">
 NO Subscription:<input type="radio" name="subsrad" value="0">
 </div>

et gérer jquery pour l'alerte comme pour la valeur définie / Modifié via div id:

$("#subscriptions input") // select the radio by its id
    .on('change', function(){ // bind a function to the change event
    alert($('input[name="subsrad"]:checked', '#subscriptions').val());
            });

c'est très facile....:-}


Une façon plus simple de le faire en utilisant l'ID parent serait .... $ ("# abonnements"). On ("change", function () {var selection = $ (this) .find ("input: checked") .val (); alert (sélection);});
MistyDawn

3

Une autre façon simple de comprendre ... ça marche:

Code HTML:

 <input type="radio" name="active_status" class="active_status" value="Hold">Hold 
 <input type="radio" name="active_status" class="active_status" value="Cancel">Cancel 
 <input type="radio" name="active_status" class="active_status" value="Suspend">Suspend

Code Jquery:

$(document).on("click", ".active_status", function () {
 var a = $('input[name=active_status]:checked').val();  
 (OR)   
 var a = $('.active_status:checked').val();
 alert(a);
});

3

valeur cachée du bouton radio multi-groupe sur le tableau

var arr = [];
    function r(n) {


        var section = $('input:radio[name="' + n + '"]:checked').val();
        arr[n] = section;

        console.log(arr)
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="radio" onchange="r('b1')" class="radioID" name="b1" value="1">1
<input type="radio" onchange="r('b1')"  class="radioID" name="b1" value="2"  >2
<input type="radio" onchange="r('b1')"   class="radioID" name="b1" value="3">3

<br>

<input type="radio" onchange="r('b2')" class="radioID2" name="b2" value="4">4
<input type="radio" onchange="r('b2')"  class="radioID2" name="b2" value="5"  >5
<input type="radio" onchange="r('b2')"   class="radioID2" name="b2" value="6">6


pouvez-vous s'il vous plaît ajouter quelques explications, afin que plus de gens puissent comprendre.
Shanteshwar Inde

2

Je ne suis pas une personne javascript, mais j'ai trouvé ici pour rechercher ce problème. Pour qui google et trouver ici, j'espère que cela aide certains. Donc, comme en question si nous avons une liste de boutons radio:

<div class="list">
    <input type="radio" name="b1" value="1">
    <input type="radio" name="b2" value="2" checked="checked">
    <input type="radio" name="b3" value="3">
</div>

Je peux trouver lequel sélectionné avec ce sélecteur:

$('.list input[type="radio"]:checked:first').val();

Même si aucun élément n'est sélectionné, je ne reçois toujours pas d'erreur indéfinie. Ainsi, vous n'avez pas besoin d'écrire une instruction if supplémentaire avant de prendre la valeur de l'élément.

Voici un exemple très simple de jsfiddle .


1
Il s'agit d'une utilisation incorrecte de l'attribut name pour les entrées radio. Les boutons radio d'un groupe doivent porter le même nom si vous ne souhaitez autoriser qu'une seule valeur du groupe. Le faire de cette façon le fait fonctionner comme des cases à cocher, permettant plusieurs sélections au lieu d'une seule sélection au sein du groupe.
MistyDawn

@MistyDawn vous avez raison, je ne me souviens même pas comment j'ai écrit cela, probablement en corrigeant un bug.
Yusuf Uzun

2

Voici 2 boutons radio à savoir rd1 et Radio1

<input type="radio" name="rd" id="rd1" />
<input type="radio" name="rd" id="Radio1" /> 

Le moyen le plus simple de vérifier quel bouton radio est coché, en cochant la propriété individuelle est (": vérifié")

if ($("#rd1").is(":checked")) {
      alert("rd1 checked");
   }
 else {
      alert("rd1 not checked");
   }

Ce n'est pas une solution très robuste. Il est préférable d'avoir juste un div contenant, puis regardez toutes les radios en dessous et sélectionnez la case cochée. Vous pouvez également regarder toutes les radios avec un certain nom, puis trouver celle cochée. Cela réduit la nécessité de changer le code chaque fois qu'un bouton est ajouté.
Richard Duerr

Si votre page contient plus de 2 entrées radio, cela pourrait être TRÈS déroutant et attribuer un identifiant à chaque radio prendra beaucoup de temps. Cette méthode ne serait généralement pas considérée comme une bonne pratique.
MistyDawn

2

Même inputn'est pas nécessaire comme suggéré par d'autres réponses. Le code suivant peut également être utilisé:

var variable_name = $("[name='radio_name']:checked").val();

C'est essentiellement la même chose que cette réponse d'il y a cinq ans, juste sans inputet avec des guillemets inutiles.
Heretic Monkey

Ces citations ne sont pas inutiles et la raison pour laquelle j'ai publié la réponse ci-dessus est de faire savoir aux gens que la saisie n'est pas nécessaire
shivamag00

Vous devriez alors envisager de modifier votre question pour mentionner ces raisons plutôt que d'utiliser la commande "Utiliser le code suivant". Vous voudrez peut-être faire référence à une source qui dit que les citations sont nécessaires.
Heretic Monkey

@HereticMonkey Fait la modification ... Merci :)
shivamag00

1
    <input type="radio" name='s_2_1_6_0' value='Mail copy to my bill to address' id = "InvCopyRadio" onchange = 'SWESubmitForm(document.SWEForm2_0,s_4,"","1-DPWJJF")' style="height:20;width:25" tabindex=1997 >

$(function() {
      $("#submit").click(function() {
        alert($('input[name=s_2_1_6_0]:checked').val());
      });
    });`

1
HTML Code
<input id="is_verified" class="check" name="is_verified" type="radio" value="1"/>
<input id="is_verified" class="check" name="is_verified" type="radio" checked="checked" value="0"/>
<input id="submit" name="submit" type="submit" value="Save" />

Javascript Code
$("input[type='radio'].check").click(function() {
    if($(this).is(':checked')) {
        if ($(this).val() == 1) {
            $("#submit").val("Verified & Save");
        }else{
            $("#submit").val("Save");
        }
    }
});

1

Dans le cas où vous ne connaissez pas le nom spécifique ou souhaitez vérifier toutes les entrées radio dans un formulaire, vous pouvez utiliser une variable globale pour vérifier pour chaque groupe de radio la valeur une seule fois: `

        var radio_name = "";
        $("form).find(":radio").each(function(){
            if (!radio_name || radio_name != $(this).attr('name')) {
                radio_name = $(this).attr('name');
                var val = $('input[name="'+radio_name+'"]:checked').val();
                if (!val) alert($('input[name="'+radio_name+'"]:checked').val());
            }
        });`
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.