Як у 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. Чому? Хтось може мені допомогти?

Відповіді:


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 повертає булеві (істинні чи помилкові), а не (an) елементи.


Оскільки ця відповідь привертає багато уваги, я також включаю фрагмент 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
Я отримую «невизначене» значення
Pavan Alapati

@PavanAlapati Ми не можемо реально сказати вам, чому також не бачити ваш HTML; в ідеалі ви б опублікували нове запитання зі своїм точним фрагментом HTML та кодом, який ви використовуєте. Ви повинні визначити лише невизначені, якщо: Ім'я в селекторі не відповідає іменам радіо кнопок; жодна з радіо кнопок не перевірена; або перевіреній радіо кнопці не присвоєне значення.
Денніс


7

Є й інший спосіб. Спробуйте нижче код

$(document).ready(function(){

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



0

використовувати цей сценарій

$('input[name=q12_3]').is(":checked");

4
isФункція jQuery поверне a boolean, що в цьому випадку буде марним.
Денніс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.