Dans jQuery, comment obtenir la valeur d'un bouton radio alors qu'ils ont tous le même nom?

108

Voici mon code:

<table>
   <tr>
      <td>Sales Promotion</td>
      <td><input type="radio" name="q12_3" value="1">1</td>
      <td><input type="radio" name="q12_3" value="2">2</td>
      <td><input type="radio" name="q12_3" value="3">3</td>
      <td><input type="radio" name="q12_3" value="4">4</td>
      <td><input type="radio" name="q12_3" value="5">5</td>
   </tr>
</table>
<button id="submit">submit</button>

Voici JS:

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

Voici JSFIDDLE ! Chaque fois que je clique sur le bouton, il revient 1. Pourquoi? Quelqu'un peut-il m'aider?

SPG
la source

Réponses:

226

Dans votre code, jQuery recherche simplement la première instance d'une entrée avec nom q12_3, qui dans ce cas a une valeur de 1. Vous voulez une entrée avec un nom q12_3qui est :checked.

$("#submit").click(() => {
  const val = $('input[name=q12_3]:checked').val();
  alert(val);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<table>
  <tr>
    <td>Sales Promotion</td>
    <td><input type="radio" name="q12_3" value="1">1</td>
    <td><input type="radio" name="q12_3" value="2">2</td>
    <td><input type="radio" name="q12_3" value="3">3</td>
    <td><input type="radio" name="q12_3" value="4">4</td>
    <td><input type="radio" name="q12_3" value="5">5</td>
  </tr>
</table>
<button id="submit">submit</button>

Notez que le code ci-dessus n'est pas le même que celui utilisé .is(":checked"). La is()fonction de jQuery renvoie un booléen (vrai ou faux) et non un (des) élément (s).


Parce que cette réponse retient beaucoup l'attention, je vais également inclure un extrait de code JavaScript vanille.

document.querySelector("#submit").addEventListener("click", () => {
  const val = document.querySelector("input[name=q12_3]:checked").value;
  alert(val);
});
<table>
  <tr>
    <td>Sales Promotion</td>
    <td><input type="radio" name="q12_3" value="1">1</td>
    <td><input type="radio" name="q12_3" value="2">2</td>
    <td><input type="radio" name="q12_3" value="3">3</td>
    <td><input type="radio" name="q12_3" value="4">4</td>
    <td><input type="radio" name="q12_3" value="5">5</td>
  </tr>
</table>
<button id="submit">submit</button>

Bram Vanroy
la source
16

dans votre sélecteur, vous devez également spécifier que vous voulez le radiobutton coché:

$(function(){
    $("#submit").click(function(){      
        alert($('input[name=q12_3]:checked').val());
    });
 });
Dennis
la source
1
Je reçois une valeur `` indéfinie ''
Pavan Alapati
@PavanAlapati Nous ne pouvons pas vraiment vous dire pourquoi sans voir votre HTML également; idéalement, vous poseriez une nouvelle question avec votre extrait HTML exact et le code que vous utilisez. Cependant, vous ne devriez être indéfini que si: Le nom dans le sélecteur ne correspond pas aux noms des boutons radio; aucun des boutons radio n'est vérifié; ou le radiobutton vérifié n'a pas de valeur assignée.
Dennis
7

Vous voudrez peut-être changer de sélecteur:

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

Fantactuka
la source
7

Il y a un autre moyen aussi. Essayez ci-dessous le code

$(document).ready(function(){

      $("input[name='gender']").on("click", function() {
            alert($(this).val());
        });
});
Ankush Khandekar
la source
2

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

Oui garçon
la source
0

utiliser ce script

$('input[name=q12_3]').is(":checked");
Sohil Desai
la source
4
La isfonction de jQuery renverra a boolean, ce qui dans ce cas serait inutile.
Dennis