Jak w jQuery uzyskać wartość przycisku radiowego, jeśli wszystkie mają taką samą nazwę?

108

Oto mój kod:

<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>

Oto JS:

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

Oto JSFIDDLE ! Za każdym razem, gdy klikam przycisk, zwraca 1. Dlaczego? Czy ktoś może mi pomóc?

SPG
źródło

Odpowiedzi:

226

W Twoim kodzie jQuery szuka po prostu pierwszego wystąpienia danych wejściowych o nazwie q12_3, które w tym przypadku ma wartość 1. Chcesz wejście z nazwą q12_3, która jest :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>

Zauważ, że powyższy kod to nie to samo, co użycie .is(":checked"). is()Funkcja jQuery zwraca element logiczny (prawda lub fałsz), a nie element (y).


Ponieważ ta odpowiedź wciąż cieszy się dużym zainteresowaniem, dołączę również prosty fragment kodu JavaScript.

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
źródło
16

w swoim selektorze powinieneś również określić, że chcesz mieć zaznaczony radiobutton:

$(function(){
    $("#submit").click(function(){      
        alert($('input[name=q12_3]:checked').val());
    });
 });
Dennis
źródło
1
Otrzymuję wartość „nieokreśloną”
Pavan Alapati
@PavanAlapati Nie możemy powiedzieć, dlaczego tak naprawdę nie widzimy również kodu HTML; Idealnie byłoby, gdybyś opublikował nowe pytanie z dokładnym fragmentem kodu HTML i kodem, którego używasz. Powinieneś jednak uzyskać undefined tylko wtedy, gdy: Nazwa w selektorze nie zgadza się z nazwami przycisków radiowych; żaden z przycisków radiowych nie jest zaznaczony; lub zaznaczony radiobutton nie ma przypisanej wartości.
Dennis
7

Możesz chcieć zmienić selektor:

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

fantactuka
źródło
7

Jest też inny sposób. Wypróbuj poniższy kod

$(document).ready(function(){

      $("input[name='gender']").on("click", function() {
            alert($(this).val());
        });
});
Ankush Khandekar
źródło
2

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

Tak, chłopcze
źródło
0

użyj tego skryptu

$('input[name=q12_3]').is(":checked");
Sohil Desai
źródło
4
isFunkcja jQuery zwróci a boolean, co w tym przypadku byłoby bezużyteczne.
Dennis