Как я могу узнать, какой переключатель выбран с помощью jQuery?

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

Я могу получить их все вот так:

$("form :radio")

Как узнать, какой из них выбран?

Ответов (25)

Решение

Чтобы получить значение выбранного radioName элемента формы с идентификатором myForm :

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

Вот пример:

$('#myForm input').on('change', function() {
   alert($('input[name=radioName]:checked', '#myForm').val()); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="myForm">
  <input type="radio" name="radioName" value="1" /> 1 <br />
  <input type="radio" name="radioName" value="2" /> 2 <br />
  <input type="radio" name="radioName" value="3" /> 3 <br />
</form>

Также проверьте, ничего ли не выбирает пользователь.

var radioanswer = 'none';
if ($('input[name=myRadio]:checked').val() != null) {           
   radioanswer = $('input[name=myRadio]:checked').val();
}

Использовать этот..

$("#myform input[type='radio']:checked").val();
 $(".Stat").click(function () {
     var rdbVal1 = $("input[name$=S]:checked").val();
 }

В моем случае у меня есть две радиокнопки в одной форме, и я хотел знать статус каждой кнопки. Это сработало для меня:

// get radio buttons value
console.log( "radio1: " +  $('input[id=radio1]:checked', '#toggle-form').val() );
console.log( "radio2: " +  $('input[id=radio2]:checked', '#toggle-form').val() );


    
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="toggle-form">
  <div id="radio">
    <input type="radio" id="radio1" name="radio" checked="checked" /><label for="radio1">Plot single</label>
    <input type="radio" id="radio2" name="radio"/><label for="radio2">Plot all</label>
  </div>
</form>

Вот как я бы написал форму и обработал получение проверенного радио.

Используя форму myForm:

<form id='myForm'>
    <input type='radio' name='radio1' class='radio1' value='val1' />
    <input type='radio' name='radio1' class='radio1' value='val2' />
    ...
</form>

Получите значение из формы:

$('#myForm .radio1:checked').val();

Если вы не публикуете форму, я бы упростил ее, используя:

<input type='radio' class='radio1' value='val1' />
<input type='radio' class='radio1' value='val2' />

Тогда получение проверенного значения станет:

    $('.radio1:checked').val();

Наличие имени класса на входе позволяет мне легко стилизовать ввод ...

$("input:radio:checked").val();

Чтобы получить значение выбранного радио, которое использует класс:

$('.class:checked').val()

Я написал плагин jQuery для установки и получения значений переключателей. Это также уважает событие "изменения" на них.

(function ($) {

    function changeRadioButton(element, value) {
        var name = $(element).attr("name");
        $("[type=radio][name=" + name + "]:checked").removeAttr("checked");
        $("[type=radio][name=" + name + "][value=" + value + "]").attr("checked", "checked");
        $("[type=radio][name=" + name + "]:checked").change();
    }

    function getRadioButton(element) {
        var name = $(element).attr("name");
        return $("[type=radio][name=" + name + "]:checked").attr("value");
    }

    var originalVal = $.fn.val;
    $.fn.val = function(value) {

        //is it a radio button? treat it differently.
        if($(this).is("[type=radio]")) {

            if (typeof value != 'undefined') {

                //setter
                changeRadioButton(this, value);
                return $(this);

            } else {

                //getter
                return getRadioButton(this);

            }

        } else {

            //it wasn't a radio button - let's call the default val function.
            if (typeof value != 'undefined') {
                return originalVal.call(this, value);
            } else {
                return originalVal.call(this);
            }

        }
    };
})(jQuery);

Поместите код в любое место, чтобы включить надстройку. Тогда наслаждайтесь! Он просто отменяет функцию val по умолчанию, ничего не нарушая.

Вы можете посетить этот jsFiddle, чтобы попробовать его в действии и посмотреть, как он работает.

Скрипка

Использовать этот:

value = $('input[name=button-name]:checked').val();

Если у вас есть только 1 набор переключателей в 1 форме, код jQuery очень прост:

$( "input:checked" ).val()

Если вам нужно только логическое значение, т.е. если оно отмечено или нет, попробуйте следующее:

$("#Myradio").is(":checked")

Я выпустил библиотеку, чтобы помочь с этим. Фактически извлекает все возможные входные значения, но также включает в себя выбранный переключатель. Вы можете проверить это на https://github.com/mazondo/formalizedata.

Это даст вам js-объект ответов, так что форма вроде:

<form>
<input type="radio" name"favorite-color" value="blue" checked> Blue
<input type="radio" name="favorite-color" value="red"> Red
</form>

даст тебе:

$("form").formalizeData()
{
  "favorite-color" : "blue"
}

Если у вас есть несколько переключателей в одной форме, тогда

var myRadio1 = $('input[name=radioButtonName1]');
var value1 = myRadio1.filter(':checked').val();

var myRadio2 = $('input[name=radioButtonName2]');
var value2 = myRadio2.filter(':checked').val();

Это работает для меня.

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

$('input[name="myRadio"]').on('change', function() {
  var radioValue = $('input[name="myRadio"]:checked').val();        
  alert(radioValue); 
});

ДЕМО : https://jsfiddle.net/ipsjolly/xygr065w/

 $(function(){
     $("#submit").click(function(){      
         alert($('input:radio:checked').val());
     });
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.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>

Это отлично работает

$('input[type="radio"][class="className"]:checked').val()

Рабочая демонстрация

:checked Селектор работает checkboxes, radio buttons и выберите элементы. Только для выбранных элементов используйте :selected селектор.

API для :checked Selector

Плагин jQuery для установки и получения значений переключателей. Это также уважает событие "изменения" на них.

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <form id="toggle-form">
      <div id="radio">
        <input type="radio" id="radio1" name="radio" checked="checked" /><label for="radio1">Plot single</label>
        <input type="radio" id="radio2" name="radio"/><label for="radio2">Plot all</label>
      </div>
    </form>
    <script type="text/javascript">
    $( document ).ready(function() {
     //Get all radios:
     var radios = jQuery("input[type='radio']");
     checked_radios=radios.filter(":checked");
for(i=0;i<checked_radios.length;i++)
{
   console.log(checked_radios[i]);
}

    });
    </script>

или иначе

<script type="text/javascript">
$( document ).ready(function() {
  //Get all radios:
  checked_radios=jQuery('input[name=radio]:checked').val(); 
for(i=0;i<checked_radios.length;i++)
{
   console.log(checked_radios[i]);
}

});
</script>

Наряду с селектором CSS :checked вы также можете использовать функцию prop (начиная с jQuery 1.6). Я не могу вспомнить, над каким проектом я работал, где простое использование $('#something').is(':checked') срабатывало только иногда, и я также прибегал к использованию работы, $('#something').prop('checked') когда он терпел неудачу, но это привело меня к использованию обоих.

В приведенном ниже фрагменте кода я написал две вспомогательные функции is_checked и get_group_value . Функция is_checked возвращает логическое значение true / false; Значение true, если вход, переданный в параметре, проверяется (также проверяется с помощью prop() функции) или false, если он не отмечен. Функция get_group_value принимает name радио-входы и возвращает значение того, которое проверено, или пустую строку, если ни одна из них не отмечена. Эти вспомогательные функции также будут работать с флажками, а не только с переключателями.

Поскольку вопрос не определял, когда они получают значение (я), я написал несколько слушателей для четырех (3) разных сценариев: при взаимодействии с любым переключателем, при отправке формы и при нажатии на один из них. жестко запрограммированные кнопки для одноразового извлечения значения группы.

Обратите внимание, что я использую «щелчок», чтобы определить, когда пользователь взаимодействует с элементом ввода радио, потому что «изменение» никогда не сработает, поскольку атрибут «значение» не изменяется, когда он отмечен или нет. Я использую это как для флажков, так и для переключателей.

function is_checked(input) {
  var $input = $(input);
  return $input.is(':checked') || $input.prop('checked'); //Returns a boolean value. True if checked, false if not.
}
function get_group_value(group_name) {
  var $inputs = $('[name="' + group_name + '"]:checked');
  if ($inputs.length) { return $inputs.first().val(); } //If it exists, return the value of the first one found
  return ''; //If it doesn't exist, return nothing
}
$('form').on('submit', function(e) {
  e.preventDefault();
  var $form = $(this), results = {};
  $form.find('input[type=radio]').each(function() {
    var $input = $(this);
    if (is_checked(this)) {
      results[$input.attr('name')] = $input.val();
    }
  });
  console.info('Form Results', results);
});
$('form input[type=radio]').on('click', function(e) {
  var group_name = $(this).attr('name');
  console.info('Radio Button Click', group_name, get_group_value(group_name));
});
$('button.radio-button').on('click', function(e) {
  var group_name = $(this).attr('id');
  console.info('Button Click', group_name, get_group_value(group_name));
});
.my-test {
  background: #ffffff;
  color: #000000;
  padding: 16px;
}

form {
  padding: 8px;
  border: 1px solid #999999;
}

fieldset {
  border: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="my-test">
  <form>
    Group 1
    <fieldset>
      <label><input type="radio" name="example-1" value="Foo" required />Foo</label>
      <label><input type="radio" name="example-1" value="Bar" required />Bar</label>
    </fieldset>
    Group 2
    <fieldset>
      <label><input type="radio" name="example-2" value="Banana" required />Banana</label>
      <label><input type="radio" name="example-2" value="Apple" required />Apple</label>
    </fieldset>
    <button type="submit">Submit</button>
  </form>
  <p>Press this button to just get the value of the first group: <button class="radio-button" id="example-1">Foo or Bar?</button></p>
  <p>Press this button to just get the value of the second group: <button class="radio-button" id="example-2">Banana or Apple?</button></p>
</div>

Вы можете использовать селектор: checked вместе с переключателем.

 $("form:radio:checked").val();

В радиокнопке, созданной JSF (используя <h:selectOneRadio> тег), вы можете сделать это:

radiobuttonvalue = jQuery("input[name='form_id\:radiobutton_id']:checked").val();

где selectOneRadio ID - это radiobutton_id, а идентификатор формы - form_id .

Обязательно используйте имя вместо идентификатора , как указано, потому что jQuery использует этот атрибут ( имя создается автоматически JSF, похожим на идентификатор элемента управления).

Если у вас уже есть ссылка на группу переключателей, например:

var myRadio = $("input[name=myRadio]");

Используйте filter() функцию, а не find() . ( find() предназначен для поиска дочерних / дочерних элементов, тогда как filter() поиск элементов верхнего уровня по вашему выбору.)

var checkedValue = myRadio.filter(":checked").val();

Примечания: этот ответ изначально исправлял другой ответ, который рекомендовал использовать find(), который, похоже, с тех пор был изменен. find() все еще может быть полезно в ситуации, когда у вас уже есть ссылка на элемент контейнера, но не на переключатели, например:

var form = $("#mainForm");
...
var checkedValue = form.find("input[name=myRadio]:checked").val();

Это должно работать:

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

Обратите внимание на "", используемое вокруг ввода: проверено, а не "" как в решении Питера Дж.

Получите все радиостанции:

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

Отфильтруйте, чтобы выбрать тот, который отмечен

radios.filter(":checked")

Другой вариант:

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