Как в jQuery получить значение переключателя, когда все они имеют одинаковое имя?

108

Вот мой код:

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

Вот JS:

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

Вот JSFIDDLE ! Каждый раз, когда я нажимаю кнопку, возвращается 1. Почему? Может кто-нибудь помочь мне?

SPG
источник

Ответы:

226

В вашем коде jQuery просто ищет первый экземпляр ввода с именем q12_3, которое в данном случае имеет значение 1. Вы хотите , чтобы вход с именем q12_3, которое :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>

Обратите внимание, что приведенный выше код не совпадает с использованием .is(":checked"). is()Функция jQuery возвращает логическое значение (истина или ложь), а не элемент (ы).


Поскольку этот ответ продолжает привлекать много внимания, я также добавлю ванильный фрагмент 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>

Брэм Ванрой
источник
16

в вашем селекторе вы также должны указать, что вы хотите установить флажок:

$(function(){
    $("#submit").click(function(){      
        alert($('input[name=q12_3]:checked').val());
    });
 });
Деннис
источник
1
Я получаю значение undefined
Паван Алапати
@PavanAlapati Мы не можем сказать вам почему, не увидев вашего HTML; в идеале вы должны опубликовать новый вопрос с вашим точным фрагментом HTML и кодом, который вы используете. Вы должны получить значение undefined только в том случае, если: имя в селекторе не соответствует именам радиокнопок; ни одна из радиокнопок не проверена; или отмеченному радиокнопке не присвоено значение.
Деннис
7

Вы можете изменить селектор:

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

Fantactuka
источник
7

Есть и другой способ. Попробуйте под кодом

$(document).ready(function(){

      $("input[name='gender']").on("click", function() {
            alert($(this).val());
        });
});
Анкуш Хандекар
источник
2

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

Да мальчик
источник
0

используйте этот скрипт

$('input[name=q12_3]').is(":checked");
Сохил Десаи
источник
4
isФункция jQuery вернет a boolean, что в этом случае было бы бесполезно.
Деннис