JQuery получить значение выбранного переключателя


557

Постановка проблемы проста. Мне нужно посмотреть, выбрал ли пользователь радиокнопку из группы радиостанций. Все переключатели в группе имеют одинаковый идентификатор.

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

<input type="radio" name='s_2_1_6_0' value='Mail copy to my bill to address' id = "InvCopyRadio" onchange = 'SWESubmitForm(document.SWEForm2_0,s_4,"","1-DPWJJF")' style="height:20;width:25" tabindex=1997 >

В дополнение к этому, когда выбран переключатель, он не добавляет атрибут «checked» в элемент управления, просто проверяемый текст (я думаю, только свойство, проверенное без значения) . Ниже показано, как выглядит выбранное радиоуправление.

<input type="radio" checked name='s_2_1_6_0' value='Mail copy to my bill to address' id = "InvCopyRadio" onchange = 'SWESubmitForm(document.SWEForm2_0,s_4,"","1-DPWJJF")' style="height:20;width:25" tabindex=1997 >

Кто-нибудь может мне помочь с кодом JQuery, который может помочь мне получить значение проверенного переключателя?


71
У вас есть несколько элементов с одинаковым идентификатором? Это ужасно.
— Мэтт Болл


Как это работает с их одинаковым идентификатором? При оценке по идентификатору не останавливается ли оценка на первом сопоставленном элементе? Какова цель, они показывают динамические элементы в разное время?
— Марк Карпентер-младший

1
К сведению, помощник ASP.NET MVC @ Html.RadioButtonFor сгенерирует все переключатели с одинаковым идентификатором. упс.
— Трийнко

Ответы:


1120

Просто используйте.

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

Так легко это.


25
Не забудьте про кавычки: $ ("input [name = '" + fieldName + "']: флажок"). Val ();
— Атара

4
@Guraprasad Рао: Это правильный код - кавычки не нужны в этом случае. Попробуйте и посмотрите.
— Стефан

2
Почему это возвращает «on», а не значение, которое я указал в HTML? РЕДАКТИРОВАТЬ: Потому что у меня не было кавычек вокруг моих значений.
— Винсент

3
$. ( 'вход [имя = "name_of_your_radiobutton"]: проверено') Вал ();
— Самера Прасад Джаясинге

1
Обратите внимание, что если ни одна кнопка не выбрана, она просто вернется null, что логично, но иногда может сбить вас с толку, когда вы привыкли видеть ""значение по умолчанию при .val()вызове.
— xji

313

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

Чтобы получить значение выбранного радиокнопки, выберите его по имени с помощью :checkedфильтра.

var selectedVal = "";
var selected = $("input[type='radio'][name='s_2_1_6_0']:checked");
if (selected.length > 0) {
    selectedVal = selected.val();
}

РЕДАКТИРОВАТЬ

Таким образом, вы не можете контролировать имена. В этом случае я бы сказал, что поместите все эти переключатели внутри элемента div с именем скажем radioDiv, а затем немного измените ваш селектор:

var selectedVal = "";
var selected = $("#radioDiv input[type='radio']:checked");
if (selected.length > 0) {
    selectedVal = selected.val();
}

75

Простейший способ получить значение выбранного переключателя заключается в следующем:

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

Между селектором не должно быть пробела.


Самый простой вариант, это.
— andreszs

44
$("#radioID") // select the radio by its id
    .change(function(){ // bind a function to the change event
        if( $(this).is(":checked") ){ // check if the radio is checked
            var val = $(this).val(); // retrieve the value
        }
    });

Обязательно оберните это в функцию готовности DOM ( $(function(){...});или $(document).ready(function(){...});).


Я всегда получаю пустое значение с этим кодом .. Я думаю, это связано с тем, что у меня нет свойства со значением, проверенным только проверенный текст (я не уверен, что мы можем считать его свойством)
— user1114212

Вы выбираете переключатель по его идентификатору? Вы изменили radioIDего идентификатор?
— Пураг

37
  1. В вашем коде jQuery просто ищет первый экземпляр ввода с именем q12_3, который в этом случае имеет значение 1. Вы хотите, чтобы вход с именем q12_3 был :checked.
$(function(){
    $("#submit").click(function() {     
        alert($("input[name=q12_3]:checked").val());
    });
});
  1. Обратите внимание, что приведенный выше код не совпадает с использованием .is(":checked"). is() Функция jQuery возвращает логическое значение (true или false), а не элемент.

28
<input type="radio" class="radioBtnClass" name="numbers" value="1" />1<br/>
<input type="radio" class="radioBtnClass" name="numbers" value="2" />2<br/>
<input type="radio" class="radioBtnClass" name="numbers" value="3" />3<br/>

Это вернет проверенное значение переключателя.

if($("input[type='radio'].radioBtnClass").is(':checked')) {
    var card_type = $("input[type='radio'].radioBtnClass:checked").val();
    alert(card_type);
}

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

для вложенных атрибутов

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

Не забывайте одиночные скобки для имени


20

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

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

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

radios.filter(":checked");

ИЛИ

Другой способ узнать значение переключателя

var RadeoButtonStatusCheck = $('form input[type=radio]:checked').val();

3
Я использую, $('[name=your_inputs_names]:checked').val()потому что они всегда имеют одно и то же уникальное имя
— vladkras

4
Хорошее использование.filter()
— Марк Карпентер-младший

2
Это .filter(). Я бы хотел, чтобы этот ответ был наверху.
— Юсрил Маулидан Раджи

16

Чтобы получить значение выбранной радиокнопки, используйте RadioButtonName и идентификатор формы, содержащий RadioButton.

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

ИЛИ только

$('form input[type=radio]:checked').val();

12

Проверьте пример, он работает нормально

<div class="dtl_radio">
  Metal purity : 
    <label>
    <input type="radio" name="purityradio" class="gold_color" value="92" checked="">
    92 %
  </label>
    <label>
    <input type="radio" name="purityradio" class="gold_color" value="75">
    75 %
  </label>
    <label>
    <input type="radio" name="purityradio" class="gold_color" value="58.5">
    58.5 %
  </label>
    <label>
    <input type="radio" name="purityradio" class="gold_color" value="95">
    95 %
  </label>
    <label>
    <input type="radio" name="purityradio" class="gold_color" value="59">
    59 %
  </label>
    <label>
    <input type="radio" name="purityradio" class="gold_color" value="76">
    76 %
  </label>
    <label>
    <input type="radio" name="purityradio" class="gold_color" value="93">
    93 %
  </label>
   </div>

var check_value = $('.gold_color:checked').val();


12

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

$('#submit').click(function(){
  var section = $('input:radio[name="sec_num"]:checked').val();
  var question = $('input:radio[name="qst_num"]:checked').val();
  
  var selectedVal = checkVal(section, question);
  $('#show_val_div').text(selectedVal);
  $('#show_val_div').show();
});

function checkVal(section, question) {
  var value = $('input:radio[name="sec'+section+'_r'+question+'"]:checked').val() || "Selection Not Made";
  return value;
}
* { margin: 0; }
div { margin-bottom: 20px; padding: 10px; }
h5, label { display: inline-block; }
.small { font-size: 12px; }
.hide { display: none; }
#formDiv { padding: 10px; border: 1px solid black; }
.center { display:block; margin: 0 auto; text-align:center; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="center">
  <div>
    <h4>Section 1</h4>

    <h5>First question text</h5>
    <label class="small"><input type="radio" name="sec1_r1" value="(1:1) YES"> YES</label>
    <label class="small"><input type="radio" name="sec1_r1" value="(1:1) NO"> NO</label>
    <br/>
    <h5>Second question text</h5>
    <label class="small"><input type="radio" name="sec1_r2" value="(1:2) YES"> YES</label>
    <label class="small"><input type="radio" name="sec1_r2" value="(1:2) NO"> NO</label>
    <br/>
    <h5>Third Question</h5>
    <label class="small"><input type="radio" name="sec1_r3" value="(1:3) YES"> YES</label>
    <label class="small"><input type="radio" name="sec1_r3" value="(1:3) NO"> NO</label>
  </div>

  <div>
    <h4>Section 2</h4>
    <h5>First question text</h5>
    <label class="small"><input type="radio" name="sec2_r1" value="(2:1) YES"> YES</label>
    <label class="small"><input type="radio" name="sec2_r1" value="(2:1) NO"> NO</label>
    <br/>
    <h5>Second question text</h5>
    <label class="small"><input type="radio" name="sec2_r2" value="(2:2) YES"> YES</label>
    <label class="small"><input type="radio" name="sec2_r2" value="(2:2) NO"> NO</label>
    <br/>
    <h5>Third Question</h5>
    <label class="small"><input type="radio" name="sec2_r3" value="(2:3) YES"> YES</label>
    <label class="small"><input type="radio" name="sec2_r3" value="(2:3) NO"> NO</label>
  </div>

  <div>
    <h4>Section 3</h4>
    <h5>First question text</h5>
    <label class="small"><input type="radio" name="sec3_r1" value="(3:1) YES"> YES</label>
    <label class="small"><input type="radio" name="sec3_r1" value="(3:1) NO"> NO</label>
    <br/>
    <h5>Second question text</h5>
    <label class="small"><input type="radio" name="sec3_r2" value="(3:2) YES"> YES</label>
    <label class="small"><input type="radio" name="sec3_r2" value="(3:2) NO"> NO</label>
    <br/>
    <h5>Third Question</h5>
    <label class="small"><input type="radio" name="sec3_r3" value="(3:3) YES"> YES</label>
    <label class="small"><input type="radio" name="sec3_r3" value="(3:3) NO"> NO</label>
  </div>
</div>


<div id="formDiv" class="center">
  <form target="#show_val_div" method="post">
    <p>Choose Section Number</p>
    <label class="small">
      <input type="radio" name="sec_num" value="1"> 1</label>
    <label class="small">
      <input type="radio" name="sec_num" value="2"> 2</label>
    <label class="small">
      <input type="radio" name="sec_num" value="3"> 3</label>
    <br/><br/>
    
    <p>Choose Question Number</p>
    <label class="small">
      <input type="radio" name="qst_num" value="1"> 1</label>
    <label class="small">
      <input type="radio" name="qst_num" value="2"> 2</label>
    <label class="small">
      <input type="radio" name="qst_num" value="3"> 3</label>
    <br/><br/>
    
    <input id="submit" type="submit" value="Show Value">
    
  </form>
  <br/>
  <p id="show_val_div"></p>
</div>
<br/><br/><br/>


12

Используйте код ниже

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

Обратите внимание, что атрибут value должен быть определен так, чтобы в вашем результате могли быть "Male" или "Female".

<div id='div_container'>
<input type="radio" name="Gender" value="Male" /> Male <br />
<input type="radio" name="Gender" value="Female" /> Female
</div>

7

Попробуйте это с примером

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1  /jquery.min.js"></script>
<form id="myForm">
<input type="radio" name="radio" value="first"/> 1 <br/>
<input type="radio" name="radio" value="second"/> 2 <br/>
</form>



<script>
$(document).ready(function () {
    $('#myForm').on('click', function () {
        var value = $("[name=radio]:checked").val();

        alert(value);
    })
});
</script>


6
if (!$("#InvCopyRadio").prop("checked") && $("#InvCopyRadio").prop("checked"))
    // do something

1
Зачем сравнивать строки с тем, undefinedкогда вы наверняка знаете, какое значение должно быть checked? Там нет необходимости в JQuery.
— Девин Берк

В вопросе я не вижу никакой информации о том, что одна радио-кнопка будет проверена с самого начала. Я имею в виду, что это в большинстве случаев с переключателями. Так что в случае, когда мы должны были проверить это, и ни один из них не был выбран, attr («флажок») вернул бы нулевой объект.
— Тадей Магаджна

Да, но я просто имел в виду, что возвращение нулевого значения не приведет к ошибке, поэтому сравнение с "undefined"ним не нужно.
— Девин Берк

5

Вы можете получить значение выбранной радиокнопки по Id, используя это в javascript / jQuery.

$("#InvCopyRadio:checked").val();

Я надеюсь, это поможет.


очень эффективный !!
— MHJ

4

Лучший способ объяснить эту простую тему - дать простой пример и ссылку:

В следующем примере у нас есть две радиокнопки. Если пользователь выбирает какую-либо радиокнопку, мы отобразим выбранное значение радиокнопки в окне предупреждения.

Html:

<form id="Demo">
<input type="radio" name="Gender" value="Male" /> Male <br />
<input type="radio" name="Gender" value="Female" /> Female<br />
<input type="radio" name="Gender" value="others" /> others <br />
</form>

JQuery: -

 $(document).ready(function(){
        $('#Demo input').on('change', function() {
            alert($('input[name="Gender"]:checked', '#Demo').val());
        });
    });

4

Я знаю, что присоединяюсь так поздно. Но стоит упомянуть, что это занимает

<label class="custom-control-label" for="myRadioBtnName">Personal Radio Button</label>

А потом я проверил это в моем JS. Это может быть как

$(document).ready(function () { 

$("#MyRadioBtnOuterDiv").click(function(){
    var radioValue = $("input[name=myRadioButtonNameAttr]:checked").val();
    if(radioValue === "myRadioBtnName"){
        $('#showMyRadioArea').show();
    }else if(radioValue === "yourRadioBtnName"){
        $('#showYourRadioArea').show();
    }
});
});

`


3
<div id="subscriptions">
 Company Suscription: <input type="radio" name="subsrad" value="1">
 Customer Subscription:<input type="radio" name="subsrad" value="2">
 Manully Set:<input type="radio" name="subsrad" value="MANUAL">
 NO Subscription:<input type="radio" name="subsrad" value="0">
 </div>

и обрабатывать jquery для оповещения, как для значения, установленного / измененного через div id:

$("#subscriptions input") // select the radio by its id
    .on('change', function(){ // bind a function to the change event
    alert($('input[name="subsrad"]:checked', '#subscriptions').val());
            });

это так просто ....: -}


Более простой способ сделать это с помощью родительского идентификатора был бы .... $ ("# subscription"). On ("change", function () {var selection = $ (this) .find ("input: checked") .val (); alert (selection);});
— MistyDawn

3

Еще один простой способ понять ... Это работает:

HTML-код:

 <input type="radio" name="active_status" class="active_status" value="Hold">Hold 
 <input type="radio" name="active_status" class="active_status" value="Cancel">Cancel 
 <input type="radio" name="active_status" class="active_status" value="Suspend">Suspend

Код Jquery:

$(document).on("click", ".active_status", function () {
 var a = $('input[name=active_status]:checked').val();  
 (OR)   
 var a = $('.active_status:checked').val();
 alert(a);
});

3

переключатель мультигруппы скрытого значения в массив

var arr = [];
    function r(n) {


        var section = $('input:radio[name="' + n + '"]:checked').val();
        arr[n] = section;

        console.log(arr)
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="radio" onchange="r('b1')" class="radioID" name="b1" value="1">1
<input type="radio" onchange="r('b1')"  class="radioID" name="b1" value="2"  >2
<input type="radio" onchange="r('b1')"   class="radioID" name="b1" value="3">3

<br>

<input type="radio" onchange="r('b2')" class="radioID2" name="b2" value="4">4
<input type="radio" onchange="r('b2')"  class="radioID2" name="b2" value="5"  >5
<input type="radio" onchange="r('b2')"   class="radioID2" name="b2" value="6">6


Можете ли вы добавить некоторые объяснения, чтобы больше людей могли понять.
— Шантешвар Инд

2

Я не javascript человек, но я нашел здесь для поиска этой проблемы. Для тех, кто гуглит и находит здесь, я надеюсь, что это поможет некоторым. Итак, как в вопросе, если у нас есть список переключателей:

<div class="list">
    <input type="radio" name="b1" value="1">
    <input type="radio" name="b2" value="2" checked="checked">
    <input type="radio" name="b3" value="3">
</div>

Я могу найти, какой выбран с этим селектором:

$('.list input[type="radio"]:checked:first').val();

Даже если не выбран ни один элемент, я все равно не получаю неопределенную ошибку. Таким образом, вам не нужно писать дополнительный оператор if, прежде чем принимать значение элемента.

Вот очень простой пример jsfiddle .


1
Это неправильное использование атрибута имени для радиовходов. Радиокнопки в группе должны иметь одинаковое имя, если вы хотите разрешить только одно значение из группы. Делая это таким образом, он работает как флажки, позволяя выбирать несколько элементов вместо одного выбора в группе.
— MistyDawn

@ MistyDawn вы правы, я даже не помню, как я это написал, возможно, это из-за исправления ошибки.
— Юсуф Узун

2

Вот 2 переключателя, а именно rd1 и Radio1

<input type="radio" name="rd" id="rd1" />
<input type="radio" name="rd" id="Radio1" /> 

Простейший способ проверить, какой переключатель отмечен, путем проверки отдельного свойства (": checked")

if ($("#rd1").is(":checked")) {
      alert("rd1 checked");
   }
 else {
      alert("rd1 not checked");
   }

Это не очень надежное решение. Лучше просто иметь содержащий div, а затем посмотреть на все радиостанции под ним и выберите отмеченный. Вы также можете посмотреть все радио с определенным именем, а затем найти проверенный. Это уменьшает необходимость менять код каждый раз, когда добавляется кнопка.
— Ричард Дуерр

Если на вашей странице имеется более 2 радиовходов, это может ОЧЕНЬ запутать, и назначение идентификатора каждому радио будет очень трудоемким. Этот метод обычно не считается хорошей практикой.
— MistyDawn

2

Даже inputне обязательно, как подсказывают другие ответы. Следующий код также может быть использован:

var variable_name = $("[name='radio_name']:checked").val();

По сути, это то же самое, что и ответ пять лет назад, только без inputи с ненужными кавычками.
— Еретик Обезьяна

Эти цитаты не являются ненужными, и причина, по которой я разместил ответ выше, состоит в том, чтобы дать людям понять, что ввод не нужен
— shivamag00

Тогда вам следует рассмотреть возможность редактирования вашего вопроса, чтобы упомянуть эти причины, а не использовать команду «Использовать следующий код». Вы можете ссылаться на источник, который говорит, что цитаты необходимы.
— Еретик Обезьяна

@HereticMonkey Закончил редактирование ... Спасибо :)
— shivamag00

1
    <input type="radio" name='s_2_1_6_0' value='Mail copy to my bill to address' id = "InvCopyRadio" onchange = 'SWESubmitForm(document.SWEForm2_0,s_4,"","1-DPWJJF")' style="height:20;width:25" tabindex=1997 >

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

1
HTML Code
<input id="is_verified" class="check" name="is_verified" type="radio" value="1"/>
<input id="is_verified" class="check" name="is_verified" type="radio" checked="checked" value="0"/>
<input id="submit" name="submit" type="submit" value="Save" />

Javascript Code
$("input[type='radio'].check").click(function() {
    if($(this).is(':checked')) {
        if ($(this).val() == 1) {
            $("#submit").val("Verified & Save");
        }else{
            $("#submit").val("Save");
        }
    }
});

1

Если вы не знаете отдельного имени или хотите проверить все радиовходы в форме, вы можете использовать глобальную переменную для проверки значения для каждой радиогруппы только один раз: `

        var radio_name = "";
        $("form).find(":radio").each(function(){
            if (!radio_name || radio_name != $(this).attr('name')) {
                radio_name = $(this).attr('name');
                var val = $('input[name="'+radio_name+'"]:checked').val();
                if (!val) alert($('input[name="'+radio_name+'"]:checked').val());
            }
        });`
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.