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


264

У мене є якась дивна проблема з моєю програмою JS. У мене це працювало належним чином, але чомусь воно більше не працює. Я просто хочу знайти значення перемикача (який обраний) і повернути його до змінної. Чомусь він постійно повертається undefined.

Ось мій код:

function findSelection(field) {
    var test = 'document.theForm.' + field;
    var sizes = test;

    alert(sizes);
        for (i=0; i < sizes.length; i++) {
            if (sizes[i].checked==true) {
            alert(sizes[i].value + ' you got a value');     
            return sizes[i].value;
        }
    }
}

submitForm:

function submitForm() {

    var genderS =  findSelection("genderS");
    alert(genderS);
}

HTML:

<form action="#n" name="theForm">

    <label for="gender">Gender: </label>
    <input type="radio" name="genderS" value="1" checked> Male
    <input type="radio" name="genderS" value="0" > Female<br><br>
    <a href="javascript: submitForm()">Search</A>
</form>

Відповіді:


395

Ви можете зробити щось подібне:

var radios = document.getElementsByName('genderS');

for (var i = 0, length = radios.length; i < length; i++) {
  if (radios[i].checked) {
    // do whatever you want with the checked radio
    alert(radios[i].value);

    // only one radio can be logically checked, don't check the rest
    break;
  }
}
<label for="gender">Gender: </label>
<input type="radio" name="genderS" value="1" checked="checked">Male</input>
<input type="radio" name="genderS" value="0">Female</input>

jsfiddle

Редагувати: Дякую HATCHA та jpsetung за ваші пропозиції щодо редагування.


5
Це працювало для jquery 1.7, але тепер правильним синтаксисом для jQuery 1.9 є $ ('input [name = "genderS"]: перевірено'). Val (); (видалити @)
jptsetung

1
Я вважаю, що @синтаксис був застарілий навіть раніше (jquery 1.2)
Том Піетросанті

@TomPietrosanti, здається, що документація трохи відключена, jsfiddle.net/Xxxd3/608 працює в <1.7.2, але не в> 1.8.3. Незалежно від цього, @безумовно, слід зняти
jbabey

Так, схоже, вони там залишили деяку зворотню сумісність, але не оновили документи, щоб вони відповідали. Я пам’ятаю якийсь худ, коли вони відкинули деякі застарілі функції, які все ще широко використовуються, тому вони знову додали підтримку. Можливо, саме тому ...
Том Піетросанті

2
document.querySelector()Мабуть, мабуть, зараз рекомендується підхід у прямому JavaScript.
Дейв

335

Це працює з будь-яким дослідником.

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

Це простий спосіб отримати значення будь-якого типу введення. Вам також не потрібно включати шлях до jQuery.


23
Використання document.querySelector () - це чиста відповідь на javascript: developer.mozilla.org/en-US/docs/Web/API/document.querySelector
AdamJonR

8
Якщо ви зберігаєте його у змінній області і не вибрано радіопередачу, ви змусите браузер зупинитися. Консоль говорить: TypeError document.querySelector(...)є null.
зателефонуй мені

14
Це працює лише в тому випадку, якщо обраний один. Тож слід перевірити це раніше. var selector = document.querySelector('input[name="genderS"]:checked'); if(selector) console.log(selector.value);
Маркус Зеллер

Я працюю з Шаблонами в Метеорі, і цей :checkedтрюк повністю прибив це для мене .. для мене виправлення читання радіо кнопок із форми шаблону Метеора булоaccountType = template.find("[name='optradio']:checked").value;
zipzit

У мене є одне корпоративне середовище, де воно не працює послідовно на IE11 - якийсь режим зворотної сумісності.
Стів Блек

35
document.forms.your-form-name.elements.radio-button-name.value

5
Це також працює:document.forms.your-form-name.name-shared-by-radio-buttons.value
Web_Designer

7
Я думаю, що більшість людей це оглядають. Прийнята відповідь працює. Відповідь Джоргоса Цаконаса краще. Але це принципово правильна відповідь. Це те, як насправді працюють перемикачі. Зауважте, що якщо нічого не вибрано, він повертає порожній рядок.
Марк Голдфайн

@Web_Designer Чи повинен ваш коментар не бути справжньою відповіддю?
Ідеограма

Це не спрацьовує, якщо ваш радіовведення не має форми, тому я не думаю, що це краща відповідь, ніж запитSelector, можливо, ці два слід об'єднати.
Томаш Хюбельбауер

такий спосіб не працює, якщо ваші радіоприймачі знаходяться всередині міток
Ігор Фоменко

19

Оскільки jQuery 1.8, правильний синтаксис запиту є

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

Чи не $('input[@name="genderS"]:checked').val();більше, який працював в JQuery 1.7 (з @ ).


16

Версія ECMAScript 6

let genderS = Array.from(document.getElementsByName("genderS")).find(r => r.checked).value;

16

Найпростіше рішення:

 document.querySelector('input[name=genderS]:checked').value

1
Проголосовано з двох причин: 1. це працює. 2. Це не була кульгава відповідь на запитання.
Джон

21
Це точна копія відповіді @Giorgos Tsakonas, яка була надана роком раніше.
T Nguyen

7

Спробуйте це

function findSelection(field) {
    var test = document.getElementsByName(field);
    var sizes = test.length;
    alert(sizes);
    for (i=0; i < sizes; i++) {
            if (test[i].checked==true) {
            alert(test[i].value + ' you got a value');     
            return test[i].value;
        }
    }
}


function submitForm() {

    var genderS =  findSelection("genderS");
    alert(genderS);
    return false;
}

Скрипку тут .


6

Редагувати: За словами Chips_100, ви повинні використовувати:

var sizes = document.theForm[field];

безпосередньо без використання тестової змінної.


Стара відповідь:

Вам evalце не сподобається?

var sizes = eval(test);

Я не знаю, як це працює, але для мене ти лише копіюєш рядок.


eval - не найкращий варіант тут ... ви можете сказати var sizes = document.theForm[field];та видалити перше завдання, тому більше не використовуйте testзмінну.
Денніс

Наскільки мені відомо, чи би eval працював таким, як є? Або це працювало б лише eval('var sizes=document.theForm.' + field)?
Майкл Лаффарг

твердження eval у вашій відповіді var sizes = eval(test);працювало б так (я просто тестую його в firebug).
Денніс

Це має більше сенсу, але я отримую помилку "Неочікуваний маркер [" у тому рядку, де я кладу fieldв дужки. Будь-які здогадки, чому?
мкьонг

4

Це чистий JavaScript, заснований на відповіді @Fontas, але з кодом безпеки, щоб повернути порожній рядок (і уникати а TypeError), якщо немає вибраної радіо-кнопки:

var genderSRadio = document.querySelector("input[name=genderS]:checked");
var genderSValue = genderSRadio ? genderSRadio.value : "";

Код розпадається так:

  • Рядок 1: отримайте посилання на елемент управління, який (a) є <input>типом, (b) має nameатрибут genderSта (c) перевіряється.
  • Рядок 2: Якщо такий елемент управління є, поверніть його значення. Якщо немає, поверніть порожній рядок. genderSRadioМінлива truthy якщо лінія 1 знахідки контролю і нуль / falsey , якщо він не робить.

Для JQuery використовуйте відповідь @ jbabey і зауважте, що якщо немає вибраної радіо кнопки, вона повернеться undefined.



3

Ось приклад радіостанцій, де не використовується атрибут Checked = "перевірено"

function test() {
var radios = document.getElementsByName("radiotest");
var found = 1;
for (var i = 0; i < radios.length; i++) {       
    if (radios[i].checked) {
        alert(radios[i].value);
        found = 0;
        break;
    }
}
   if(found == 1)
   {
     alert("Please Select Radio");
   }    
}

DEMO : http://jsfiddle.net/ipsjolly/hgdWp/2/ [ Натисніть Знайти, не вибираючи жодного радіо ]

Джерело: http://bloggerplugnplay.blogspot.in/2013/01/validateget-cont-radio-value-in.html


2

Ось хороший спосіб отримати значення перевіреного перемикача за допомогою простого JavaScript:

const form = document.forms.demo;
const checked = form.querySelector('input[name=characters]:checked');

// log out the value from the :checked radio
console.log(checked.value);

Джерело: https://ultimatecourses.com/blog/get-value- radio-buttons

Використовуючи цей HTML:

<form name="demo">
  <label>
    Mario
    <input type="radio" value="mario" name="characters" checked>
  </label>
  <label>
    Luigi
    <input type="radio" value="luigi" name="characters">
  </label>
  <label>
    Toad
    <input type="radio" value="toad" name="characters">
  </label>
</form>

Ви також можете використати Array Find the checkedProperties, щоб знайти зареєстрований товар:

Array.from(form.elements.characters).find(radio => radio.checked);

1

Використовуючи чистий javascript, ви можете обробити посилання на об’єкт, який пересилав подію.

function (event) {
    console.log(event.target.value);
}

1

припустимо, вам потрібно розмістити різні рядки радіо кнопок у формі, кожен з яких має окремі імена атрибутів ('option1', 'option2' тощо), але однакове ім’я класу. Можливо, вам знадобляться вони в декількох рядках, де кожен буде надсилати значення за шкалою від 1 до 5, що стосується питання. ви можете написати свій JavaScript так:

<script type="text/javascript">

    var ratings = document.getElementsByClassName('ratings'); // we access all our radio buttons elements by class name     
    var radios="";

    var i;
    for(i=0;i<ratings.length;i++){
        ratings[i].onclick=function(){
            var result = 0;
            radios = document.querySelectorAll("input[class=ratings]:checked");
            for(j=0;j<radios.length;j++){
                result =  result + + radios[j].value;
            }
            console.log(result);
            document.getElementById('overall-average-rating').innerHTML = result; // this row displays your total rating
        }
    }
</script>

Я б також вставив кінцевий результат у прихований елемент форми, який слід подати разом із формою.



0

Якщо вам можливо призначити ідентифікатор для елемента форми (), цей спосіб може розглядатися як безпечний альтернативний спосіб (особливо, коли назва елемента радіогрупи не є унікальним у документі):

function findSelection(field) {
    var formInputElements = document.getElementById("yourFormId").getElementsByTagName("input");
    alert(formInputElements);
        for (i=0; i < formInputElements.length; i++) {
        if ((formInputElements[i].type == "radio") && (formInputElements[i].name == field) && (formInputElements[i].checked)) {
            alert(formInputElements[i].value + ' you got a value');     
            return formInputElements[i].value;
        }
    }
}

HTML:

<form action="#n" name="theForm" id="yourFormId">

-3
 <input type=radio name=rdbExampleInfo id=rdbExamples value="select 1">
 <input type=radio name=rdbExampleInfo id=rdbExamples value="select 2">
 <input type=radio name=rdbExampleInfo id=rdbExamples value="select 3">
 <input type=radio name=rdbExampleInfo id=rdbExamples value="select 4"> 

і т.д., то використовувати просто

  $("#rdbExamples:checked").val()

Або

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.