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

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;

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

ZombieBatman
источник
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

Malathy
источник
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/

JHS
источник
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);

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

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

Если вы используете jQuery:

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

Сентил Кумар Тангавель
источник
1

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

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

var value = radio.length && radio.find(r => r.checked).value
Yukulélé
источник
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;
user7420100
источник
Можете ли вы объяснить, как это отвечает на вопрос?
soundslikeodd
« получить выбранное значение из группы переключателей »: rates.rate.valueнетrates.value
user7420100
Это правильный ответ. document.getElementById("rates").rate.value[или]document.forms[0].rate.value
Атика
0

проверить значение по ID:

var CheckedValues = ($("#r1").is(':checked')) ? 1 : 0;
Набиль Икбал
источник
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

mahdavipanah
источник
Не работал для меня; увидеть подобный синтаксис выше от Павана, который сделал. Как в,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);`
Anshu
источник
-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/>
}
Кавья Ханумантхараджу
источник