Як отримати значення вибраної радіо кнопки?


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
Я не розумію, чи є два елементи з однаковим ідентифікатором?
мзалазар

3
@mzalazar Ні, у кожної радіо-кнопки є свій ідентифікатор, але всі мають однакове ім'я, і ​​саме це вводить їх в одну групу, тож якщо ви виберете одну, інша буде відмінена. За допомогою відповіді Камрана Ахмеда ви можете перевірити, який із перемикачів у групі обраний, і отримати лише значення вибраного (перевіреного).
Броко

4
Код mahdavipanah трохи вище (з [checked]) шукає атрибут (тобто початковий стан). Натомість слід використовувати :checked, яке шукає властивість (тобто поточний стан), і майже завжди те, що ви хочете.
Гра "Двомісний"

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

519

Це працює в 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)операція. Якщо ви не профілювали його, щоб вказати щось на кшталт часу запиту, що зростає з кількістю елементів на сторінці, або, якщо ви не розумієте вихідний код браузера за ним, ви не можете сказати.
амн

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 м].
Еван Ху

Це має бути форма, не може використовувати, наприклад, 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 не містить елемента форми.

Fiddle тут (працює в Chrome і Firefox): https://jsfiddle.net/Josh_Shields/23kg3tf4/1/


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

@ j08691 Ну добре, дякую, що повідомили мені. Це одна з речей, яку я дізнався в університетському класі. Напевно, краще звідти нічого не довіряти, а просто використовувати онлайн-посилання.
JHS

6
"... не йде в ногу з сучасними стандартами." не є переконливим аргументом. Будь ласка, докладно. Якщо це працює, це працює. Це також менше рядків, ніж прийнята відповідь, яка визначає лише, чи вибраний варіант "Фіксована ставка".
нулі-і-

Згадана вище скрипка не працює з браузером Safari (7.1.4). Значення відображається як невизначене, зміна стану перемикача не впливає на це.
Стюарт Р. Джеффіріс

Так, це також не працює з браузером Edge (40.15063.0.0). Якщо вони застаріли таким чином, це здається дивним, оскільки цей спосіб простіший і має сенс, оскільки перемикачі групуються за своєю природою. Більшість інших відповідей виглядають так, як вони перевіряють прапорці.
mikato

10

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

Рішення

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"/>

КОД ЖКЕРІ:

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 ми можемо отримати значення, використовуючи id " getElementById()" у вказаному вище коді, містить ім'я не Id, щоб ви могли змінити так

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-name-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

прямий виклик радіо кнопки багато разів дає значення ПЕРШОЇ кнопки, а не КВЕДЕНОї кнопки. замість циклу через радіо кнопки, щоб побачити, яку з них перевірено, я вважаю за краще викликати функцію 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, люблю це! Але це порушиться, якщо жоден елемент не буде перевірений.
pongi

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;

Чи можете ви пояснити, як це відповідає на питання?
звучитьподібно

" отримати вибране значення з групи радіо кнопок ": rates.rate.valuenotrates.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'). InternalHtml
James Cluade

0

Якщо ви використовуєте JQuery, будь ласка, використовуйте нижній фрагмент для групи радіо кнопок.

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

0

Просто використовуйте: document.querySelector('input[rate][checked]').value


Не працював для мене; дивіться аналогічний синтаксис вище від Pawan, що і робив. Як у,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.