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

2534

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

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

$("form :radio")

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

Теги:
radio-button
jquery-selectors

33 ответа

3473
Лучший ответ

Чтобы получить значение выбранного элемента radioName формы с id 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>
  • 289
    Я закончил тем, что использовал это: $ ('ввод формы [тип = радио]: проверено')
  • 43
    @PeterJ: Почему вы использовали два аргумента вместо простого '#myform input[name=radioName]:checked' ?
Показать ещё 12 комментариев
382

Используйте это.

$("#myform input[type='radio']:checked").val();
  • 61
    Я думаю, что если ваша форма имеет несколько наборов радиокнопок, она получит значение только первого набора.
  • 3
    Это вернет значение только первой переключателя, который отмечен в форме. Это должно быть сделано так, как предложил Питер Дж.
Показать ещё 4 комментария
291

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

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

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

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

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

var form = $("#mainForm");
...
var checkedValue = form.find("input[name=myRadio]:checked").val();
  • 7
    Я просто хотел добавить, для ясности, что find () на самом деле ищет все дочерние элементы (которые соответствуют данному селектору). Если вы хотите только прямых детей, используйте children ().
124

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

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

Обратите внимание, что "используется для ввода: проверено, а не" как", как решение Peter J

  • 0
    это должен быть выбранный ответ. имя очень хороший способ отслеживать радио-кнопки
76

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

 $("form:radio:checked").val();
  • 12
    Это выглядит хорошо, однако, документация jQuery рекомендует использовать [type = radio] вместо: radio для лучшей производительности. Это компромисс между удобочитаемостью и производительностью. Я обычно воспринимаю удобство чтения над производительностью в таких тривиальных вопросах, но в этом случае я думаю, что [type = radio] на самом деле более понятен. Так что в этом случае это будет выглядеть как $ ("form input [type = radio]: checked"). Val (). Тем не менее, правильный ответ.
51

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

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

Фильтр, чтобы получить тот, который был отмечен

radios.filter(":checked")
47

Если вы хотите только логическое значение, то есть, если оно проверено или не пытается это сделать:

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

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

$('input[name=radioName]:checked').val()
  • 6
    Часть ": радио" здесь не нужна.
31
$("input:radio:checked").val();
23

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

Используя форму 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();

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

21

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

// 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>
  • 1
    Что вы имеете в виду статус каждой кнопки? Радиокнопки с одинаковым именем позволяют проверять только одну, поэтому, если вы выбрали отмеченную, остальные не проверяются.
16

В сгенерированном переключателе JSF (с помощью тега <h:selectOneRadio>) вы можете сделать это:

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

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

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

15

Я написал плагин 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 call the default val function.
            if (typeof value != 'undefined') {
                return originalVal.call(this, value);
            } else {
                return originalVal.call(this);
            }

        }
    };
})(jQuery);

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

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

Fiddle

14

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

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

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

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

14

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

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

Это прекрасно работает

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

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

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

API для :checked Selector

11

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

$('.class:checked').val()
11
 $(".Stat").click(function () {
     var rdbVal1 = $("input[name$=S]:checked").val();
 }
9

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

$('input[name="myRadio"]').on('change', function() {
  var radioValue = $('input[name="myRadio"]:checked').val();        
  alert(radioValue); 
});
  • 0
    Используйте событие click, а не событие change, если хотите, чтобы оно работало во всех браузерах
9

Используйте это:

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

ДЕМО: 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>
6

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

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

Я выпустил библиотеку, чтобы помочь с этим. На самом деле вытягивает все возможные входные значения, но также включает, какой переключатель был проверен. Вы можете проверить это на 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"
}
4

Чтобы получить все значения радиокнопок в массиве JavaScript, используйте следующий код jQuery:

var values = jQuery('input:checkbox:checked.group1').map(function () {
    return this.value;
}).get();
  • 2
    Радиокнопки не совпадают с флажками. В этом примере используются флажки.
3

попробуйте -

var radioVal = $("#myform").find("input[type='radio']:checked").val();

console.log(radioVal);
2

Другой способ получить его:

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

Что мне нужно было сделать, это упростить код С#, который делает как можно больше в JavaScript-интерфейсе. Я использую контейнер fieldset, потому что я работаю в DNN и имеет свою собственную форму. Поэтому я не могу добавить форму.

Мне нужно проверить, какое текстовое поле из 3 используется, и если это так, какой тип поиска? Начинается со значения, Содержит значение, Точное совпадение значения.

HTML:

<fieldset id="fsPartNum" class="form-inline">
<div class="form-group">
    <label for="txtPartNumber">Part Number:</label>
    <input type="text" id="txtPartNumber" class="input-margin-pn" />
</div>
<div class="form-group">
    <label for="radPNStartsWith">Starts With: </label>
    <input type="radio" id="radPNStartsWith" name="partNumber" checked  value="StartsWith"/>
</div>
<div class="form-group">
    <label for="radPNContains">Contains: </label>
    <input type="radio" id="radPNContains" name="partNumber" value="Contains" />
</div>
<div class="form-group">
    <label for="radPNExactMatch">Exact Match: </label>
    <input type="radio" id="radPNExactMatch" name="partNumber" value="ExactMatch" />
</div>

И мой JavaScript:

        alert($('input[name=partNumber]:checked', '#fsPartNum').val()); 
    if(txtPartNumber.val() !== ''){
        message = 'Customer Part Number';
    }
    else if(txtCommercialPartNumber.val() !== ''){

    }
    else if(txtDescription.val() !== ''){

    }

Можно сказать, что можно использовать любой содержащий тег с идентификатором. Для DNNers это хорошо знать. Конечной целью здесь является переход к среднему уровню кода, необходимый для запуска поиска деталей в SQL Server.

Таким образом, мне не нужно копировать гораздо более сложный предыдущий код С#. Тяжелый подъем осуществляется прямо здесь.

Мне пришлось немного поработать над этим, а затем поработать с ним, чтобы заставить его работать. Поэтому для других DNNers, надеюсь, это легко найти.

1
$(function () {
// Someone has clicked one of the radio buttons
var myform= 'form.myform';
$(myform).click(function () {
    var radValue= "";
    $(this).find('input[type=radio]:checked').each(function () {
        radValue= $(this).val();
    });
  })
});
1

Из этот вопрос, я придумал альтернативный способ доступа к выбранному в текущий момент input, когда вы находитесь в событии click для своей соответствующей метки, Причина заключается в том, что недавно выбранный input не обновляется до тех пор, пока не произойдет его событие label.

TL; DR

$('label').click(function() {
  var selected = $('#' + $(this).attr('for')).val();

  ...
});

$(function() {
  // this outright does not work properly as explained above
  $('#reported label').click(function() {
    var query = $('input[name="filter"]:checked').val();
    var time = (new Date()).toString();

    $('.query[data-method="click event"]').html(query + ' at ' + time);
  });

  // this works, but fails to update when same label is clicked consecutively
  $('#reported input[name="filter"]').on('change', function() {
    var query = $('input[name="filter"]:checked').val();
    var time = (new Date()).toString();

    $('.query[data-method="change event"]').html(query + ' at ' + time);
  });

  // here is the solution I came up with
  $('#reported label').click(function() {
    var query = $('#' + $(this).attr('for')).val();
    var time = (new Date()).toString();

    $('.query[data-method="click event with this"]').html(query + ' at ' + time);
  });
});
input[name="filter"] {
  display: none;
}
#reported label {
  background-color: #ccc;
  padding: 5px;
  margin: 5px;
  border-radius: 5px;
  cursor: pointer;
}
.query {
  padding: 5px;
  margin: 5px;
}
.query:before {
  content: "on " attr(data-method)": ";
}
[data-method="click event"] {
  color: red;
}
[data-method="change event"] {
  color: #cc0;
}
[data-method="click event with this"] {
  color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="reported">
  <input type="radio" name="filter" id="question" value="questions" checked="checked">
  <label for="question">Questions</label>

  <input type="radio" name="filter" id="answer" value="answers">
  <label for="answer">Answers</label>

  <input type="radio" name="filter" id="comment" value="comments">
  <label for="comment">Comments</label>

  <input type="radio" name="filter" id="user" value="users">
  <label for="user">Users</label>

  <input type="radio" name="filter" id="company" value="companies">
  <label for="company">Companies</label>

  <div class="query" data-method="click event"></div>
  <div class="query" data-method="change event"></div>
  <div class="query" data-method="click event with this"></div>
</form>
0

Как насчет этого?

Используя изменение и получить значение типа радио проверяется...

$('#my-radio-form').on('change', function() {
  console.log($('[type="radio"]:checked').val());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<form id="my-radio-form">
  <input type="radio" name="input-radio" value="a" />a
  <input type="radio" name="input-radio" value="b" />b
  <input type="radio" name="input-radio" value="c" />c
  <input type="radio" name="input-radio" value="d" />d
</form>
0

JQuery, чтобы получить все переключатели в форме и проверенное значение.

$.each($("input[type='radio']").filter(":checked"), function () {
  console.log("Name:" + this.name);
  console.log("Value:" + $(this).val());
});
0

Вам нужен доступ с помощью переключателя: :checked:

Проверьте этот документ:

пример:

$('input[name=radioName]:checked', '#myForm').val()
$('#myForm input').on('change', function() {
	$('#val').text($('input[name=radioName]:checked', '#myForm').val());
});
#val {
  color: #EB0054;
  font-size: 1.5em;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<h3>Radio value: <span id='val'><span></h3>
<form id="myForm">
  <input type="radio" name="radioName" value="a"> a <br>
  <input type="radio" name="radioName" value="b"> b <br>
  <input type="radio" name="radioName" value="c"> c <br>
</form>
-1

Вы можете вызвать функцию onChange()

  <input type="radio" name="radioName" value="1" onchange="radio_changed($(this).val())" /> 1 <br />
  <input type="radio" name="radioName" value="2" onchange="radio_changed($(this).val())"  /> 2 <br />
  <input type="radio" name="radioName" value="3"  onchange="radio_changed($(this).val())" /> 3 <br />

<script>
function radio_changed(val){
    alert(val);
}
</script>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню