Làm thế nào để có được giá trị của nút radio đã chọn?


316

Tôi muốn nhận giá trị được chọn từ một nhóm các nút radio.

Đây là HTML của tôi:

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

Đây là .js của tôi:

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;

Tôi tiếp tục không xác định.


50
Bạn không sử dụng jQuery ở đây, nhưng nếu bạn muốn, bạn có thể sử dụng cái này:$("input[type='radio'][name='rate']:checked").val();
GJK

Tại sao bạn không thể kiểm tra đối tượng đó? Dù sao bạn cần sử dụng.checked
Amol M Kulkarni


Tôi không chắc có cần thiết hay không, nhưng đó là một thói quen tốt để đặt các nút radio trong <form></form>container.
Kamil

Câu trả lời:


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

Phần tử tỷ lệ là một div, vì vậy nó sẽ không có giá trị. Đây có lẽ là nơiundefined đến từ.

Các checkedbất động sản sẽ cho bạn biết liệu phần tử được chọn:

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

229
Trong trò đùa, đó là$("input[name=rate]:checked").val()
Kamran Ahmed

1
Tôi không hiểu, có hai yếu tố có cùng ID không?
mzalazar

3
@mzalazar Không, mọi nút radio đều có ID riêng nhưng tất cả đều có cùng tên, đó là thứ đặt chúng vào một nhóm, vì vậy nếu bạn chọn một nút khác thì sẽ bị bỏ chọn. Với câu trả lời của Kamran Ahmed, bạn có thể kiểm tra nút radio nào trong nhóm được chọn và chỉ nhận giá trị của nút được chọn (đã chọn).
Broco

4
Mã của mahdavipanah ngay phía trên (với [checked]) tìm thuộc tính (tức là trạng thái ban đầu). Thay vào đó :checked, bạn nên sử dụng , tìm kiếm tài sản (tức là trạng thái hiện tại) và gần như luôn luôn là những gì bạn muốn.
Đôi

5
Trong Javascript, nó sẽ làdocument.querySelectorAll("input[name=rate]:checked")[0].value
Vincent McNabb

519

Điều này hoạt động trong IE9 trở lên và tất cả các trình duyệt khác.

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

13
Tất nhiên bạn sẽ phải kiểm tra xem querySelector có trả về null không. Đây là trường hợp nếu không có nút radio được kiểm tra.
Robert

18
@KamranAhmed: Giải pháp jQuery của bạn đi kèm với chi phí lớn hơn nhiều.

5
ParthikGosar: IE8 không hỗ trợ :checkedbộ chọn.

14
Lưu ý rằng các dấu ngoặc kép xung quanh ratelà không cần thiết.
mbomb007

1
@KamranAhmed cho đến khi và trừ khi bạn có thể lập hồ sơ ở trên và / hoặc kiểm tra việc thực hiện đằng sau cuộc gọi, bạn không thể nói gì thêm về hiệu suất của những điều trên hơn là bạn có thể nói về bất kỳ oneliner nào khác gọi mã gốc. Chúng tôi không có đủ thông tin để suy đoán cách trình duyệt quản lý để xác định vị trí :checked(các) phần tử - có thể nó có mọi thứ "được băm và lưu trữ" và đó là một O(1)hoạt động. Trừ khi bạn đã định hình nó để chỉ ra thứ gì đó như thời gian truy vấn tăng lên với số lượng phần tử trên trang hoặc trừ khi bạn hiểu mã nguồn trình duyệt đằng sau nó, bạn không thể biết được.
amn

144

Bạn có thể nhận được giá trị bằng cách sử dụng checkedtài sản.

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
Vì chỉ có thể kiểm tra một đài phát thanh, tôi thường mong muốn một câu lệnh breakhoặc returncâu lệnh bên trong ifkhối dừng các đường truyền bổ sung qua vòng lặp. Một điểm nhỏ, nhưng phong cách tốt.
RobP

1
Đây là cách thực hiện vanilla sạch nhất cho câu hỏi này. Thanh danh!
SeaWar Warrior404

37

Đối với bạn những người sống ở rìa:

Hiện tại có một thứ gọi là RadioNodeList và truy cập thuộc tính giá trị của nó sẽ trả về giá trị của đầu vào hiện đang được kiểm tra. Điều này sẽ loại bỏ sự cần thiết của lần đầu tiên lọc ra đầu vào 'được kiểm tra' như chúng ta thấy trong nhiều câu trả lời được đăng.

Mẫu ví dụ

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

Để lấy lại giá trị đã kiểm tra, bạn có thể làm một cái gì đó như thế này:

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

JSFiddle để chứng minh điều đó: http://jsfiddle.net/vjop5xtq/

Xin lưu ý rằng điều này đã được triển khai trong Firefox 33 (Tất cả các trình duyệt chính khác dường như đều hỗ trợ nó). Các trình duyệt cũ hơn sẽ yêu cầu một polfyill RadioNodeListđể điều này hoạt động đúng


1
form.elements["test"].valuehoạt động rất tốt trong Chrome [Phiên bản 49.0.2623.87 m].
Evan Hu

Nó phải là một hình thức, không thể sử dụng ví dụ như div. Nếu không, điều này đang làm việc trong FF 71.0.
Andrew

16

Một công việc cho tôi được đưa ra dưới đây từ 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()

Biến được chọnOption sẽ chứa giá trị của nút radio đã chọn (nghĩa là) o1 hoặc o2


11

Một tùy chọn khác (dường như cũ hơn) là sử dụng định dạng: "document.nameOfTheForm.nameOfTheInput.value;" ví dụ: 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>

Bạn có thể tham chiếu đến phần tử theo tên của nó trong một biểu mẫu. HTML gốc của bạn không chứa thành phần biểu mẫu.

Fiddle tại đây (hoạt động trong Chrome và Firefox): https://jsfiddle.net/Josh_Shields/23kg3tf4/1/


1
Đây là định dạng DOM cũ hơn nhiều và thực sự không nên sử dụng nữa vì nó bị giới hạn ở một số yếu tố nhất định và không theo kịp các tiêu chuẩn hiện tại.
j08691

@ j08691 À được rồi cảm ơn vì đã cho tôi biết. Đây là một trong những điều mà tôi học được trong một lớp Đại học. Có lẽ tốt hơn là không nên tin bất cứ điều gì từ đó và chỉ sử dụng các tài liệu tham khảo trực tuyến thay thế.
JHS

6
"... không theo kịp các tiêu chuẩn hiện tại." không phải là một lập luận thuyết phục. Xin hãy giải thích. Nếu nó hoạt động nó hoạt động. Nó cũng ít dòng hơn câu trả lời được chấp nhận chỉ xác định nếu tùy chọn được chọn là 'Tỷ lệ cố định'.
số không và những người

Fiddle ở trên dường như không hoạt động với trình duyệt Safari (7.1.4). Giá trị hiển thị là không xác định, thay đổi trạng thái nút radio không ảnh hưởng đến điều đó.
Stuart R. Jefferys

Có, điều này cũng không hoạt động với trình duyệt Edge (40.15063.0.0). Nếu họ không tán thành theo cách này, điều đó có vẻ lạ, bởi vì cách này đơn giản hơn và có ý nghĩa vì các nút radio được nhóm theo bản chất của chúng. Hầu hết các câu trả lời khác trông giống như họ đang kiểm tra các hộp kiểm.
mikato

10

Sử dụng document.querySelector ('input [type = radio]: đã kiểm tra'). Value; để nhận giá trị của hộp kiểm đã chọn, bạn có thể sử dụng các thuộc tính khác để nhận giá trị như tên = giới tính, v.v. vui lòng xem qua đoạn trích dưới đây chắc chắn nó sẽ hữu ích cho bạn,

Giải pháp

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>

Cảm ơn bạn


7

MÃ HTML:

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

MÃ SỐ YÊU CẦU:

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

Bạn sẽ nhận được

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

5

Trong Javascript, chúng tôi có thể nhận được các giá trị bằng cách sử dụng "" của Id getElementById()trong đoạn mã trên mà bạn đã đăng có chứa tên không phải Id để bạn sửa đổi như thế này

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

sử dụng Phòngvalue này theo mã của bạn


5

Một năm đã trôi qua kể từ khi câu hỏi được hỏi, nhưng tôi nghĩ rằng một sự cải thiện đáng kể của các câu trả lời là có thể. Tôi thấy đây là tập lệnh dễ nhất và linh hoạt nhất, bởi vì nó kiểm tra xem một nút đã được kiểm tra chưa, và nếu vậy, giá trị của nó là gì:

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

Bạn cũng có thể gọi hàm trong một hàm khác, như thế này:

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

5

Giả sử phần tử biểu mẫu của bạn được tham chiếu theo myFormbiến bên dưới và các nút radio của bạn chia sẻ tên "my-radio-button-name-name", sau đây là JavaScript thuần và tuân thủ tiêu chuẩn (mặc dù tôi chưa kiểm tra nó có ở mọi nơi không ):

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

Trên đây sẽ mang lại giá trị của một kiểm tra (hoặc chọn, vì nó còn được gọi là) yếu tố nút radio, nếu có, hoặcnull ngược lại. Điểm mấu chốt của giải pháp là namedItemchức năng hoạt động với các nút radio cụ thể.

Xem HTMLFormEuity.elements , HTMLFormControlsCollection.namedItem và đặc biệt là RadioNodeList.value , như namedItem thường lệ trả về một RadioNodeListđối tượng.

Tôi sử dụng MDN vì nó cho phép một người theo dõi các tiêu chuẩn tuân thủ, ít nhất là ở mức độ lớn và vì nó dễ hiểu hơn nhiều ấn phẩm WhatWG và W3C.


Khi tôi viết câu trả lời, tôi đã đọc lướt qua các câu trả lời hiện có và không thấy bất cứ điều gì giống với những gì tôi muốn chia sẻ. Bây giờ tôi thấy rằng tôi đã bỏ lỡ ít nhất hai giải pháp tương tự. Mặc dù, không ai viết đề xuất mã của họ bằng cú pháp cụ thể mà tôi sử dụng, nhưng ý tưởng chung là như nhau. FYI. Vấn đề là để có được tham chiếu đến RadioNodeListthông qua một cái gì đó như form.elements[name]hoặc form[name](có thể, một suy đoán) hoặc thông qua cú pháp trên của tôi.
amn

3

gọi trực tiếp nút radio nhiều lần sẽ cho bạn giá trị của nút FIRST chứ không phải nút KIỂM TRA. thay vì lặp các nút radio thông qua để xem cái nào được kiểm tra, tôi thích gọi một onclickhàm javascript đặt một biến mà sau này có thể được lấy ra theo ý muốn.

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

mà gọi:

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

lợi thế bổ sung là tôi có thể xử lý dữ liệu và / hoặc phản ứng với việc kiểm tra nút (trong trường hợp này là bật nút SUBMIT).


5
onchangethay vào đó, bạn nên liên kết sự kiện, trong trường hợp người dùng sử dụng bàn phím.
John Dvorak

2

Một cải tiến cho các chức năng được đề xuất trước đó:

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

Tôi coi vấn đề này với javascript thuần là tìm nút đã kiểm tra, tìm giá trị của nó và bật ra khỏi mảng.

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

Lưu ý rằng tôi đang sử dụng các chức năng mũi tên . Xem fiddle này cho một ví dụ làm việc.


Tôi sẽ thêm một tagName === 'INPUT'kiểm tra để đảm bảo bạn không làm việc trên bất kỳ thẻ nào khác ngoài input.
Aternus


1

Bạn có thể sử dụng .find()để chọn thành phần được kiểm tra:

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

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

1
Tôi không biết Array.find, thích nó! Nhưng điều này sẽ phá vỡ nếu không có yếu tố nào được kiểm tra.
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>

sau đó...

var rate_value = rates.rate.value;

Bạn có thể giải thích làm thế nào điều này trả lời câu hỏi?
soundslikeodd

" lấy giá trị đã chọn từ một nhóm các nút radio ": rates.rate.valuekhôngrates.value
user7420100

Đây là một câu trả lời đúng. document.getElementById("rates").rate.value[hoặc]document.forms[0].rate.value
Atika

0

kiểm tra giá trị theo ID:

var CheckedValues = ($("#r1").is(':checked')) ? 1 : 0;

0

Tôi đã sử dụng hàm jQuery.click để có được đầu ra mong muốn:

$('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;
});

Hy vọng nó giúp.


0

Nếu các nút ở dạng
var myform = new FormData(getformbywhatever); myform.get("rate");
QuerySelector ở trên là một giải pháp tốt hơn. Tuy nhiên, phương pháp này rất dễ hiểu, đặc biệt nếu bạn không có đầu mối về CSS. Thêm vào đó, các trường đầu vào hoàn toàn có khả năng ở dạng.
Không kiểm tra, có những giải pháp tương tự khác, xin lỗi vì sự lặp lại


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

không thể lấy giá trị của nút radio như thế thay vào đó sử dụng

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

để nhận các giá trị của thẻ HTML, hãy sử dụng document.getEuityById ('r1'). InternalHtml
James Cluade

0

Nếu bạn đang sử dụng JQuery, vui lòng sử dụng đoạn trích dưới đây cho nhóm các nút radio.

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

0

Đơn giản chỉ cần sử dụng: document.querySelector('input[rate][checked]').value


Không làm việc cho tôi; thấy một cú pháp tương tự ở trên từ Pawan đã làm. Như trong,document.querySelector('input[name = rate]:checked').value
Tim Erickson

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

Bạn cũng có thể lặp qua các nút bằng vòng lặp forEach trên các phần tử

    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>

Mã thông báo

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

Trong php nó là
trang html rất dễ dàng

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

Lấy giá trị từ biểu mẫu để php

$radio=$_POST['radio'];<br/>
use php if(isset($_POST['submit']))<br/>
{<br/>
echo "you selected".$radio."thank u";<br/>
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.