Как получить значение выбранного радиокнопки?


316

Я хочу получить выбранное значение из группы переключателей.

Вот мой HTML:

<div id="rates">
  <input type="radio" id="r1" name="rate" value="Fixed Rate"> Fixed Rate
  <input type="radio" id="r2" name="rate" value="Variable Rate"> Variable Rate
  <input type="radio" id="r3" name="rate" value="Multi Rate" checked="checked"> Multi Rate  
</div>

Вот мой .js:

var rates = document.getElementById('rates').value;
var rate_value;
if(rates =='Fixed Rate'){
    rate_value = document.getElementById('r1').value;

}else if(rates =='Variable Rate'){
    rate_value = document.getElementById('r2').value;

}else if(rates =='Multi Rate'){
    rate_value = document.getElementById('r3').value;
}  

document.getElementById('results').innerHTML = rate_value;

Я продолжаю становиться неопределенным.


50
Вы не используете jQuery здесь, но если вы когда-нибудь захотите, вы можете использовать это:$("input[type='radio'][name='rate']:checked").val();
GJK

Почему вы не можете осмотреть этот объект? В любом случае вам нужно использовать.checked
Amol M Kulkarni


Я не уверен, требуется ли это или нет, но это хорошая привычка помещать переключатели в <form></form>контейнер.
Камил

Ответы:


239
var rates = document.getElementById('rates').value;

Элемент ставок является a div, поэтому он не будет иметь значения. Это, вероятно, откуда undefinedисходит.

checkedСвойство будет сказать вам , выбран ли элемент:

if (document.getElementById('r1').checked) {
  rate_value = document.getElementById('r1').value;
}

229
В jquery это будет$("input[name=rate]:checked").val()
Кямран Ахмед

1
Я не понимаю, есть ли два элемента с одинаковым идентификатором?
mzalazar

3
@mzalazar Нет, каждая радиокнопка имеет свой собственный идентификатор, но у всех одинаковое имя, и именно это помещает их в одну группу, поэтому, если вы выберете одну, другая будет отменена. С помощью ответа Kamran Ahmed вы можете проверить, какая из переключателей в группе выбрана, и получить только значение выбранной (отмеченной).
Broco

4
Код Махдавипаны чуть выше (с [checked]) ищет атрибут (то есть начальное состояние). Вместо этого вы должны использовать :checked, который ищет свойство (то есть текущее состояние), и который почти всегда является тем, что вы хотите.
Двухместный номер

5
В Javascript это было быdocument.querySelectorAll("input[name=rate]:checked")[0].value
Винсент Макнабб

521

Это работает в IE9 и выше и во всех других браузерах.

document.querySelector('input[name="rate"]:checked').value;

13
Конечно, вам нужно проверить, возвращает ли querySelector значение NULL. Это тот случай, если ни один переключатель не отмечен.
Роберт

18
@KamranAhmed: Ваше решение jQuery стоит гораздо дороже.

5
ParthikGosar: IE8 не поддерживает :checkedселектор.

14
Обратите внимание, что кавычки вокруг rateне обязательны.
mbomb007

1
@KamranAhmed до тех пор, пока вы не сможете профилировать вышеупомянутое и / или осмотреть реализацию, стоящую за вызовом, вы не можете сказать ничего о производительности вышеупомянутого, чем вы можете сказать о любом другом oneliner, который вызывает собственный код. У нас недостаточно информации, чтобы предположить, как браузеру удается найти :checkedэлемент (ы) - возможно, в нем все «хэшировано и кэшировано», и это O(1)операция. Если вы не профилировали его, чтобы указать, что время запроса увеличивается с увеличением числа элементов на странице, или если вы не понимаете исходный код браузера, вы не можете этого сказать.
amn

144

Вы можете получить значение с помощью checkedсвойства.

var rates = document.getElementsByName('rate');
var rate_value;
for(var i = 0; i < rates.length; i++){
    if(rates[i].checked){
        rate_value = rates[i].value;
    }
}

13
Учитывая, что может быть проверена только одна радиосвязь, я обычно ожидаю, что оператор breakили returnвнутри ifблока останавливает дополнительные проходы через цикл. Незначительный момент, но хороший стиль.
RobP

1
Это самая чистая ванильная реализация для этого вопроса. Престижность!
SeaWarrior404

37

Для вас, людей, живущих на краю:

Теперь есть то, что называется RadioNodeList и доступ к его свойству value вернет значение текущего проверенного ввода. Это избавит от необходимости сначала отфильтровывать «проверенные» входные данные, как мы видим во многих опубликованных ответах.

Пример формы

<form id="test">
<label><input type="radio" name="test" value="A"> A</label>
<label><input type="radio" name="test" value="B" checked> B</label>
<label><input type="radio" name="test" value="C"> C</label>
</form>

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

var form = document.getElementById("test");
alert(form.elements["test"].value);

JSFiddle, чтобы доказать это: http://jsfiddle.net/vjop5xtq/

Обратите внимание, что это было реализовано в Firefox 33 (кажется, что все другие основные браузеры поддерживают его). В старых браузерах RadioNodeListдля правильной работы потребуется polfyill


1
form.elements["test"].valueочень хорошо работает в Chrome [Версия 49.0.2623.87 m].
Эван Ху,

Это должна быть форма, не может использовать, например, div. В противном случае это работает в FF 71.0.
Андрей

16

Тот, который работал для меня, дан ниже от api.jquery.com.

HTML

<input type="radio" name="option" value="o1">option1</input>
<input type="radio" name="option" value="o2">option2</input>

JavaScript

var selectedOption = $("input:radio[name=option]:checked").val()

Переменная selectedOption будет содержать значение выбранного переключателя (т.е.) o1 или o2


11

Другой (очевидно более старый) вариант - использовать формат: "document.nameOfTheForm.nameOfTheInput.value;" например, document.mainForm.rads.value;

document.mainForm.onclick = function(){
    var radVal = document.mainForm.rads.value;
    result.innerHTML = 'You selected: '+radVal;
}
<form id="mainForm" name="mainForm">
    <input type="radio" name="rads" value="1" />
    <input type="radio" name="rads" value="2" />
    <input type="radio" name="rads" value="3" />
    <input type="radio" name="rads" value="4" />
</form>
<span id="result"></span>

Вы можете ссылаться на элемент по его имени в форме. Ваш оригинальный HTML не содержит элемент формы.

Скрипка здесь (работает в Chrome и Firefox): https://jsfiddle.net/Josh_Shields/23kg3tf4/1/


1
Это гораздо более старый устаревший формат DOM, и его больше не следует использовать, поскольку он ограничен определенными элементами и не соответствует современным стандартам.
j08691

@ j08691 Хорошо, спасибо, что сообщили мне об этом. Это одна из вещей, которую я изучил на уроках в университете. Вероятно, лучше не доверять чему-либо оттуда и использовать вместо этого онлайн-ссылки.
JHS

6
«... не поспевает за текущими стандартами». это не убедительный аргумент. Пожалуйста, дополните. Если это работает, это работает. Это также меньше строк, чем принятый ответ, который только определяет, является ли выбранная опция «Фиксированная ставка».
нули и единицы

Кажется, что приведенная выше скрипка не работает с браузером Safari (7.1.4). Значение отображается как неопределенное, изменение состояния переключателя не влияет на это.
Стюарт Р. Джеффрис

Да, это также не работает с браузером Edge (40.15063.0.0). Если они устарели таким образом, это кажется странным, потому что этот способ проще и имеет смысл, поскольку переключатели сгруппированы по своей природе. Большинство других ответов выглядят так же, как они проверяют флажки.
Микато

10

Используйте document.querySelector ('input [type = radio]: флажок'). Value; чтобы получить значение выбранного флажка, вы можете использовать другие атрибуты, чтобы получить значение, например, имя = пол и т. д., пожалуйста, просмотрите фрагмент ниже, это определенно будет полезно для вас,

Решение

document.mainForm.onclick = function(){
    var gender = document.querySelector('input[name = gender]:checked').value;
    result.innerHTML = 'You Gender: '+gender;
}
<form id="mainForm" name="mainForm">
    <input type="radio" name="gender" value="Male" checked/>Male
    <input type="radio" name="gender" value="Female" />Female
    <input type="radio" name="gender" value="Others" />Others
</form>
<span id="result"></span>

Спасибо


7

HTML-код:

<input type="radio" name="rdoName" value="YES"/> <input type="radio" name="rdoName" value="NO"/>

КОД JQUERY:

var value= $("input:radio[name=rdoName]:checked").val();

$("#btnSubmit").click(function(){
var value=$("input:radio[name=rdoName]:checked").val();
console.log(value);
alert(value);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="radio" name="rdoName" value="YES"/> YES
<input type="radio" name="rdoName" value="NO"/> NO
<br/>
<input type="button"id="btnSubmit"value="Which one Selected"/>

Ты получишь

value="YES" //if checked Radio Button with the value "YES"
value="NO" //if checked Radio Button with the value "NO"

5

В Javascript мы можем получить значения с помощью идентификатора " getElementById()" в вышеприведенном коде, который вы разместили, содержит имя, а не идентификатор, поэтому вы можете изменить его следующим образом

if (document.getElementById('r1').checked) {
  rate_value = document.getElementById('r1').value;
}

используйте это значение в соответствии с вашим кодом


5

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

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Check radio checked and its value</title>
</head>
<body>

    <form name="theFormName">
        <input type="radio" name="theRadioGroupName" value="10">
        <input type="radio" name="theRadioGroupName" value="20">
        <input type="radio" name="theRadioGroupName" value="30">
        <input type="radio" name="theRadioGroupName" value="40">
        <input type="button" value="Check" onclick="getRadioValue('theRadioGroupName')">
    </form>

    <script>
        function getRadioValue(groupName) {
            var radios = theFormName.elements[groupName];
            window.rdValue; // declares the global variable 'rdValue'
            for (var i=0; i<radios.length; i++) {
                var someRadio = radios[i];
                if (someRadio.checked) {
                    rdValue = someRadio.value;
                    break;
                }
                else rdValue = 'noRadioChecked';
            }
            if (rdValue == '10') {
                alert('10'); // or: console.log('10')
            }
            else if (rdValue == 'noRadioChecked') {
                alert('no radio checked');
            }
        }
    </script>
</body>
</html>

Вы также можете вызвать функцию в другой функции, например так:

function doSomething() {
    getRadioValue('theRadioGroupName');
    if (rdValue == '10') {
        // do something
    }
    else if (rdValue == 'noRadioChecked') {
        // do something else
    }  
} 

5

Предполагая, что на элемент формы ссылается myFormпеременная, указанная ниже, и что ваши радиокнопки имеют имя «my-radio-button-group-name», ниже приведен чистый JavaScript и соответствует стандартам (хотя я не проверял, чтобы он был доступен везде ):

myForm.elements.namedItem("my-radio-button-group-name").value

Вышеприведенное приведет к значению отмеченного (или выбранного, как его еще называют) элемента переключателя, если он есть, или nullиначе. Суть решения - namedItemфункция, которая работает именно с переключателями.

См. HTMLFormElement.elements , HTMLFormControlsCollection.namedItem и особенно RadioNodeList.value , так как namedItem обычно возвращает RadioNodeListобъект.

Я использую MDN, потому что он позволяет отслеживать соответствие стандартам, по крайней мере, в значительной степени, и потому, что его легче понять, чем во многих публикациях WhatWG и W3C.


Когда я писал ответ, я просматривал существующие ответы и не видел ничего похожего на то, чем я хотел поделиться. Теперь я вижу, что пропустил как минимум два похожих решения. Хотя никто не написал их предложения по коду, используя тот синтаксис, который я использую, но общая идея та же. FYI. Суть в том, чтобы получить ссылку на RadioNodeListчто-то вроде form.elements[name]или form[name](может быть, спекуляция) или через мой синтаксис выше.
AMN

3

прямой вызов радиокнопки много раз дает вам значение кнопки FIRST, а не кнопки CHECKED. вместо того, чтобы переключаться между переключателями, чтобы увидеть, какая из них отмечена, я предпочитаю вызывать функцию onclickjavascript, которая устанавливает переменную, которая впоследствии может быть получена по желанию.

<input type="radio" onclick="handleClick(this)" name="reportContent" id="reportContent" value="/reportFleet.php" >

который звонит:

var currentValue = 0;
function handleClick(myRadio) {
    currentValue = myRadio.value;
    document.getElementById("buttonSubmit").disabled = false; 
}

дополнительным преимуществом является то, что я могу обрабатывать данные и / или реагировать на проверку кнопки (в этом случае включение кнопки SUBMIT).


5
onchangeВместо этого вы должны связать событие, если пользователь использует клавиатуру.
Джон Дворжак

2

Улучшение предыдущих предложенных функций:

function getRadioValue(groupName) {
    var _result;
    try {
        var o_radio_group = document.getElementsByName(groupName);
        for (var a = 0; a < o_radio_group.length; a++) {
            if (o_radio_group[a].checked) {
                _result = o_radio_group[a].value;
                break;
            }
        }
    } catch (e) { }
    return _result;
}

2

Мое решение этой проблемы с чистым javascript - найти проверенный узел, найти его значение и вытащить его из массива.

var Anodes = document.getElementsByName('A'),
    AValue = Array.from(Anodes)
       .filter(node => node.checked)
       .map(node => node.value)
       .pop();
console.log(AValue);

Обратите внимание, что я использую функции стрелок . Смотрите эту скрипку для рабочего примера.


Я бы добавил tagName === 'INPUT'проверку, чтобы убедиться, что вы не работаете с другими тегами, кроме input.
Aternus


1

Вы можете использовать, .find()чтобы выбрать проверенный элемент:

var radio = Array.from(document.querySelectorAll('#rate input'))

var value = radio.length && radio.find(r => r.checked).value

1
Я не знал Array.find, люблю это! Но это сломалось бы, если ни один элемент не проверен.
Понги

0
<form id="rates">
  <input type="radio" name="rate" value="Fixed Rate"> Fixed
  <input type="radio" name="rate" value="Variable Rate"> Variable
  <input type="radio" name="rate" value="Multi Rate" checked> Multi
</form>

затем...

var rate_value = rates.rate.value;

Можете ли вы объяснить, как это отвечает на вопрос?
soundslikeodd

« получить выбранное значение из группы переключателей »: rates.rate.valueнетrates.value
user7420100

Это правильный ответ. document.getElementById("rates").rate.value[или]document.forms[0].rate.value
Атика


0

Я использовал функцию jQuery.click для получения желаемого результата:

$('input[name=rate]').click(function(){
  console.log('Hey you clicked this: ' + this.value);

  if(this.value == 'Fixed Rate'){
    rate_value = $('#r1').value;
  } else if(this.value =='Variable Rate'){
   rate_value = $('#r2').value;
  } else if(this.value =='Multi Rate'){
   rate_value = $('#r3').value;
  }  

  $('#results').innerHTML = rate_value;
});

Надеюсь, поможет.


0

Если кнопки в форме
var myform = new FormData(getformbywhatever); myform.get("rate");
QuerySelector выше, это лучшее решение. Тем не менее, этот метод прост для понимания, особенно если у вас нет понятия о CSS. Кроме того, поля ввода, скорее всего, будут в форме в любом случае.
Не проверял, есть другие похожие решения, извините за повторение


0
var rates = document.getElementById('rates').value;

не может получить значения радио-кнопки, как это вместо использования

rate_value = document.getElementById('r1').value;

чтобы получить значения HTML-тега, используйте document.getElementById ('r1'). innerHtml
Джеймс

0

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

var radioBtValue= $('input[type=radio][name=radiobt]:checked').val();

0

Просто используйте: document.querySelector('input[rate][checked]').value


Не работал для меня; увидеть подобный синтаксис выше от Павана, который сделал. Как в,document.querySelector('input[name = rate]:checked').value
Тим Эриксон

0

   var rates=document.getElementsByName("rate");
            for (i = 0; i < rates.length; i++) {
            if (rates[i].checked) {
              console.log(rates[i].value);
              rate=rates[i].value;
              document.getElementById("rate").innerHTML = rate;
              alert(rate);
              
            }
          }
        <div id="rates">
          <input type="radio" id="r1" name="rate" value="Fixed Rate"> Fixed Rate
          <input type="radio" id="r2" name="rate" value="Variable Rate"> Variable Rate
          <input type="radio" id="r3" name="rate" value="Multi Rate" checked="checked"> Multi Rate  
        </div>
        </br>
        <div id='rate'>
        </div>


0

Вы также можете перебирать кнопки с помощью цикла forEach на элементах.

    var elements = document.getElementsByName('radioButton');
    var checkedButton;
    console.log(elements);
    elements.forEach(e => {
        if (e.checked) {
            //if radio button is checked, set sort style
            checkedButton = e.value;
        }
    });

-1

https://codepen.io/anon/pen/YQxbZJ

HTML

<div id="rates">
<input type="radio" id="x1" name="rate" value="Fixed Rate"> Fixed Rate
<input type="radio" id="x2" name="rate" value="Variable Rate" 
checked="checked"> Variable Rate
<input type="radio" id="x3" name="rate" value="Multi Rate" > Multi Rate
</div>

<button id="rdio"> Check Radio </button>
<div id="check">

</div>

JS

var x ,y;
var x = document.getElementById("check");
function boom()
{
if (document.getElementById("x1").checked)
  y = document.getElementById("x1").value;

else if(document.getElementById("x2").checked)
  y = document.getElementById("x2").value;

else if (document.getElementById("x3").checked)
  y = document.getElementById("x3").value;
else
  y = "kuch nhi;"
x.innerHTML = y;
}

var z = document.getElementById('rdio');
z.addEventListener("click", boom);`

-2

В php это очень простая
HTML-страница

Male<input type="radio" name="radio" value="male"><br/>
Female<input type="radio" name="radio" value="female"><br/>
Others<input type="radio" name="radio" value="other"><br/>
<input type="submit" value="submit">

Принять значение от формы до php

$radio=$_POST['radio'];<br/>
use php if(isset($_POST['submit']))<br/>
{<br/>
echo "you selected".$radio."thank u";<br/>
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.