Làm cách nào để kiểm tra xem nút radio có được chọn bằng JavaScript không?


Câu trả lời:


330

Hãy giả vờ rằng bạn có HTML như thế này

<input type="radio" name="gender" id="gender_Male" value="Male" />
<input type="radio" name="gender" id="gender_Female" value="Female" />

Để xác thực phía máy khách, đây là một số Javascript để kiểm tra xem cái nào được chọn:

if(document.getElementById('gender_Male').checked) {
  //Male radio button is checked
}else if(document.getElementById('gender_Female').checked) {
  //Female radio button is checked
}

Những điều trên có thể được thực hiện hiệu quả hơn tùy thuộc vào bản chất chính xác của đánh dấu của bạn nhưng điều đó là đủ để bạn bắt đầu.


Nếu bạn chỉ muốn xem liệu có bất kỳ nút radio nào được chọn ở bất kỳ đâu trên trang không, PrototypeJS làm cho nó rất dễ dàng.

Đây là một chức năng sẽ trả về đúng nếu có ít nhất một nút radio được chọn ở đâu đó trên trang. Một lần nữa, điều này có thể cần phải được điều chỉnh tùy thuộc vào HTML cụ thể của bạn.

function atLeastOneRadio() {
    return ($('input[type=radio]:checked').size() > 0);
}

Để xác thực phía máy chủ (hãy nhớ, bạn không thể phụ thuộc hoàn toàn vào Javascript để xác thực!) , Nó sẽ phụ thuộc vào ngôn ngữ bạn chọn, nhưng bạn sẽ kiểm tra gendergiá trị của chuỗi yêu cầu.


1
nhưng những gì tôi muốn kiểm tra nếu một nút radio được chọn bất kể những gì được chọn.
noob

1
Tôi không thực sự làm theo những gì bạn đang nói? Quan tâm đến việc có chọn nút radio nào không?
Đánh dấu Biek

Đúng. bởi vì biểu mẫu không thể được gửi nếu không phải tất cả các trường được điền vào bao gồm các nút radio.
noob

if (document.getEuityById ('male_Male'). đã kiểm tra || document.getEuityById ('giới tính
Havenard

Tôi đã sửa đổi ví dụ Nguyên mẫu của mình để tận dụng bài học về bộ chọn CSS mà tôi vừa học được từ R. Bemrose.
Đánh dấu Biek

111

Với jQuery , nó sẽ giống như

if ($('input[name=gender]:checked').length > 0) {
    // do something here
}

Hãy để tôi chia nó thành nhiều phần để bao quát nó rõ ràng hơn. jQuery xử lý mọi thứ từ trái sang phải.

input[name=gender]:checked
  1. input giới hạn nó vào thẻ đầu vào.
  2. [name=gender] giới hạn nó trong các thẻ có tên giới tính trong nhóm trước.
  3. :checked giới hạn nó trong các hộp kiểm / nút radio được chọn trong nhóm trước.

Nếu bạn muốn tránh điều này hoàn toàn, hãy đánh dấu một trong các nút radio là đã chọn ( checked="checked") trong mã HTML, điều này sẽ đảm bảo rằng một nút radio luôn được chọn.


16
-1 để đề xuất một thư viện khi không được yêu cầu. Bằng cách này, chúng tôi có thể trả lời mọi thứ với "bao gồm thư viện x, sử dụng x.doWhatYouNeed ()". Không có ý định ngọn lửa, tôi thực sự nghĩ rằng câu hỏi này nên được trả lời bằng javascript thuần túy (và cuối cùng chỉ ra rằng nó dễ dàng hơn với một thư viện)
Riccardo Galli

23
@RiccardoGalli: Rất nhiều người đã sử dụng jQuery, do đó, tại sao câu trả lời bắt đầu bằng "Với jQuery, nó sẽ giống như" trong trường hợp họ đã sử dụng nó.
Powerlord

1
Bất cứ ai cũng biết nếu có thể chuỗi chọn như thế này? đầu vào [name = giới tính] [type = radio] hoặc đầu vào [name = giới tính, loại = radio] chỉ để xác nhận thêm?
Ty_

@ EW-CodeMonkey Cách đầu tiên bạn đề cập sẽ hoạt động .
Powerlord

81

Một cách vani JavaScript

var radios = document.getElementsByTagName('input');
var value;
for (var i = 0; i < radios.length; i++) {
    if (radios[i].type === 'radio' && radios[i].checked) {
        // get value, set checked flag or do whatever you need to
        value = radios[i].value;       
    }
}

2
Chà, tôi đã gặp vấn đề gần như tương tự ngay bây giờ và mã của bạn rất hữu ích
MoreThanChaos

2
Điều này sẽ giúp bạn có được giá trị của nút radio được kiểm tra lần cuối. Nếu bạn có nhiều nhóm radio thì điều này có thể sẽ không giúp bạn có được giá trị chính xác.
styfle

@styfle Điều này hoạt động tốt cho câu hỏi của OP khi anh ta nói rằng chỉ có hai nút radio trong một biểu mẫu trên trang. Giải pháp sẽ khác nhau cho một kịch bản vấn đề khác nhau, chẳng hạn như nhiều hơn hai nút radio, nhiều nhóm radio, v.v. :)
Russ Cam

2
@RussCam Có, điều này hoạt động cho một trang nhỏ chỉ có 2 nút radio, nhưng tôi đã thêm nhận xét của mình để hoàn thành câu trả lời. Cách tốt nhất để có được các yếu tố nút radio sẽ là name.
styfle

Cách tốt hơn là chọn các thành phần vô tuyến theo một lớp cụ thể và sau đó nhóm các nhóm phần tử vô tuyến khác nhau thành các lớp khác nhau. Mặt khác, giải pháp này vì nó chỉ hoạt động đối với một nhóm các thành phần vô tuyến mà không có các thành phần hình thức đầu vào khác.
Oliver

15

Chỉ cần cố gắng cải thiện giải pháp của Russ Cam với một số đường chọn CSS được đưa vào bằng JavaScript vanilla.

var radios = document.querySelectorAll('input[type="radio"]:checked');
var value = radios.length>0? radios[0].value: null;

Không có nhu cầu thực sự cho jQuery ở đây, querySelectorAll hiện được hỗ trợ rộng rãi.

Chỉnh sửa: đã sửa một lỗi với bộ chọn css, tôi đã bao gồm các trích dẫn, mặc dù bạn có thể bỏ qua chúng, trong một số trường hợp bạn không thể để chúng vào tốt hơn.


có thể là var radios = document.querySelector ALL ('input [type = "radio"]: đã kiểm tra');
Md. Shafiqur Rahman 16/07/2016

@ShafiqurRahman bạn hoàn toàn đúng, tôi sẽ cập nhật câu trả lời của tôi, tôi không nghĩ bạn cần các trích dẫn trên đài phát thanh.
Matt McCabe

3
+1 cho JavaScript Vanilla. Tôi sẽ luôn sử dụng các trích dẫn xung quanh các giá trị thuộc tính, vì đối với một số giá trị thuộc tính khác, (chẳng hạn như a[href^="http://"]) chúng sẽ được yêu cầu và tính nhất quán sẽ dễ duy trì hơn. Ngoài ra, điều này cho phép khai báo thuộc tính khớp với HTML tương ứng.
Manngo

11

Mã HTML

<input type="radio" name="offline_payment_method" value="Cheque" >
<input type="radio" name="offline_payment_method" value="Wire Transfer" >

Mã Javascript:

var off_payment_method = document.getElementsByName('offline_payment_method');
var ischecked_method = false;
for ( var i = 0; i < off_payment_method.length; i++) {
    if(off_payment_method[i].checked) {
        ischecked_method = true;
        break;
    }
}
if(!ischecked_method)   { //payment method button is not checked
    alert("Please choose Offline Payment Method");
}

2
Cảnh báo: mã này trả về cảnh báo bật lên ngay khi tải trang.
samthebrand

10

Bạn có thể sử dụng tập lệnh đơn giản này. Bạn có thể có nhiều nút radio có cùng tên và các giá trị khác nhau.

var checked_gender = document.querySelector('input[name = "gender"]:checked');

if(checked_gender != null){  //Test if something was checked
alert(checked_gender.value); //Alert the value of the checked.
} else {
alert('Nothing checked'); //Alert, nothing was checked.
}

9

Các kịch bản trong trang này đã giúp tôi đưa ra kịch bản dưới đây, mà tôi nghĩ là đầy đủ và phổ quát hơn. Về cơ bản, nó sẽ xác nhận bất kỳ số nút radio nào trong một biểu mẫu, nghĩa là nó sẽ đảm bảo rằng một tùy chọn radio đã được chọn cho mỗi một trong các nhóm radio khác nhau trong biểu mẫu. ví dụ trong mẫu thử dưới đây:

   <form id="FormID">

    Yes <input type="radio" name="test1" value="Yes">
    No <input type="radio" name="test1" value="No">

    <br><br>

    Yes <input type="radio" name="test2" value="Yes">
    No <input type="radio" name="test2" value="No">

   <input type="submit" onclick="return RadioValidator();">

Tập lệnh RadioValidator sẽ đảm bảo rằng câu trả lời đã được đưa ra cho cả 'test1' và 'test2' trước khi gửi. Bạn có thể có nhiều nhóm radio trong biểu mẫu và nó sẽ bỏ qua mọi thành phần biểu mẫu khác. Tất cả các câu trả lời radio bị thiếu sẽ hiển thị bên trong một cửa sổ bật lên cảnh báo. Ở đây nó đi, tôi hy vọng nó sẽ giúp mọi người. Bất kỳ sửa lỗi hoặc sửa đổi hữu ích chào mừng :)

<SCRIPT LANGUAGE="JAVASCRIPT">
function RadioValidator()
{
    var ShowAlert = '';
    var AllFormElements = window.document.getElementById("FormID").elements;
    for (i = 0; i < AllFormElements.length; i++) 
    {
        if (AllFormElements[i].type == 'radio') 
        {
            var ThisRadio = AllFormElements[i].name;
            var ThisChecked = 'No';
            var AllRadioOptions = document.getElementsByName(ThisRadio);
            for (x = 0; x < AllRadioOptions.length; x++)
            {
                 if (AllRadioOptions[x].checked && ThisChecked == 'No')
                 {
                     ThisChecked = 'Yes';
                     break;
                 } 
            }   
            var AlreadySearched = ShowAlert.indexOf(ThisRadio);
            if (ThisChecked == 'No' && AlreadySearched == -1)
            {
            ShowAlert = ShowAlert + ThisRadio + ' radio button must be answered\n';
            }     
        }
    }
    if (ShowAlert != '')
    {
    alert(ShowAlert);
    return false;
    }
    else
    {
    return true;
    }
}
</SCRIPT>

6

Lưu ý hành vi này với jQuery khi nhận các giá trị đầu vào radio:

$('input[name="myRadio"]').change(function(e) { // Select the radio input group

    // This returns the value of the checked radio button
    // which triggered the event.
    console.log( $(this).val() ); 

    // but this will return the first radio button's value,
    // regardless of checked state of the radio group.
    console.log( $('input[name="myRadio"]').val() ); 

});

Vì vậy, $('input[name="myRadio"]').val()không trả về giá trị đã kiểm tra của đầu vào radio, như bạn mong đợi - nó sẽ trả về giá trị của nút radio đầu tiên.


4

Với mootools ( http://mootools.net/docs/core/Euity/Euity )

html:

<input type="radio" name="radiosname" value="1" />
<input type="radio" name="radiosname" value="2" id="radiowithval2"/>
<input type="radio" name="radiosname" value="3" />

js:

// Check if second radio is selected (by id)
if ($('radiowithval2').get("checked"))

// Check if third radio is selected (by name and value)
if ($$('input[name=radiosname][value=3]:checked').length == 1)


// Check if something in radio group is choosen
if ($$('input[name=radiosname]:checked').length > 0)


// Set second button selected (by id)
$("radiowithval2").set("checked", true)

// Kiểm tra xem một cái gì đó trong nhóm radio có được chọn không nếu ($$ ('input [name = radiosname]: đã kiểm tra'). Độ dài> 0) chính xác là những gì tôi cần
Steve Johnson

3

đây là chức năng tiện ích tôi đã tạo để giải quyết vấn đề này

    //define radio buttons, each with a common 'name' and distinct 'id'. 
    //       eg- <input type="radio" name="storageGroup" id="localStorage">
    //           <input type="radio" name="storageGroup" id="sessionStorage">
    //param-sGroupName: 'name' of the group. eg- "storageGroup"
    //return: 'id' of the checked radioButton. eg- "localStorage"
    //return: can be 'undefined'- be sure to check for that
    function checkedRadioBtn(sGroupName)
    {   
        var group = document.getElementsByName(sGroupName);

        for ( var i = 0; i < group.length; i++) {
            if (group.item(i).checked) {
                return group.item(i).id;
            } else if (group[0].type !== 'radio') {
                //if you find any in the group not a radio button return null
                return null;
            }
        }
    }

1
Thích điều này bởi vì (tái) khả năng sử dụng và đơn giản của nó. Ngoài ra, giá trị trả về có thể được xử lý bằng một câu lệnh chuyển đổi tốt đẹp.
JGurtz

3

Điều này sẽ hợp lệ cho các nút radio chia sẻ cùng tên, không cần JQuery.

var x = Array.prototype.filter.call(document.getElementsByName('checkThing'), function(x) { return x.checked })[0];

Nếu chúng ta đang nói về các hộp kiểm và chúng tôi muốn một danh sách với các hộp kiểm được chọn chia sẻ tên:

var x = Array.prototype.filter.call(document.getElementsByName('checkThing'), function(x) { return x.checked });


2

chỉ là một sửa đổi nhỏ cho Mark Biek;

MÃ HTML

<form name="frm1" action="" method="post">
  <input type="radio" name="gender" id="gender_Male" value="Male" />
  <input type="radio" name="gender" id="gender_Female" value="Female" / >
  <input type="button" value="test"  onclick="check1();"/>
</form>

và mã Javascript để kiểm tra xem nút radio có được chọn không

<script type="text/javascript">
    function check1() {            
        var radio_check_val = "";
        for (i = 0; i < document.getElementsByName('gender').length; i++) {
            if (document.getElementsByName('gender')[i].checked) {
                alert("this radio button was clicked: " + document.getElementsByName('gender')[i].value);
                radio_check_val = document.getElementsByName('gender')[i].value;        
            }        
        }
        if (radio_check_val === "")
        {
            alert("please select radio button");
        }        
    }
</script>

1
getElementsByName () trả về HTMLCollection, không có thuộc tính được kiểm tra, vì vậy tôi không tin đoạn mã JavaScript mà bạn đã đăng sẽ hoạt động như dự định. Bạn sẽ phải lặp lại các yếu tố trong HTMLCollection và xem liệu có bất kỳ yếu tố nào trong số chúng được kiểm tra không, như những người khác đã đề xuất.
Rudi

cảm ơn. bạn đã đúng. :) đã cập nhật câu trả lời của tôi, để không có thêm người nào nhận được thông tin sai.
Parag

2

Có một cách rất tinh vi để bạn có thể xác thực xem có bất kỳ nút radio nào được kiểm tra bằng ECMA6 và phương thức hay không .some().

Html:

<input type="radio" name="status" id="marriedId" value="Married" />
<input type="radio" name="status" id="divorcedId" value="Divorced" />

Và javascript:

let htmlNodes = document.getElementsByName('status');

let radioButtonsArray = Array.from(htmlNodes);

let isAnyRadioButtonChecked = radioButtonsArray.some(element => element.checked);

isAnyRadioButtonCheckedsẽ là truenếu một số nút radio được chọn và falsenếu cả hai nút này không được chọn.


2

Trả lại tất cả các yếu tố được kiểm tra trong nút radio

  Array.from(document.getElementsByClassName("className")).filter(x=>x['checked']);

1

http://www.somacon.com/p143.php/

function getCheckedValue(radioObj) {
    if(!radioObj)
        return "";
    var radioLength = radioObj.length;
    if(radioLength == undefined)
        if(radioObj.checked)
            return radioObj.value;
        else
            return "";
    for(var i = 0; i < radioLength; i++) {
        if(radioObj[i].checked) {
            return radioObj[i].value;
        }
    }
    return "";
}

1

Với JQuery, một cách khác để kiểm tra trạng thái hiện tại của các nút radio là lấy thuộc tính 'được kiểm tra'.

Ví dụ:

<input type="radio" name="gender_male" value="Male" />
<input type="radio" name="gender_female" value="Female" />

Trong trường hợp này, bạn có thể kiểm tra các nút bằng cách sử dụng:

if ($("#gender_male").attr("checked") == true) {
...
}

1
Trong trường hợp của tôi, giá trị của $("#gender_male").attr("checked")là một chuỗi "checked"chứ không phải là boolean.
Koks_rs

1

Mã này sẽ cảnh báo nút radio đã chọn khi biểu mẫu được gửi. Nó đã sử dụng jQuery để lấy giá trị đã chọn.

$("form").submit(function(e) {
  e.preventDefault();
  $this = $(this);

  var value = $this.find('input:radio[name=COLOR]:checked').val();
  alert(value);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
  <input name="COLOR" id="Rojo" type="radio" value="red">
  <input name="COLOR" id="Azul" type="radio" value="blue">
  <input name="COLOR" id="Amarillo" type="radio" value="yellow">
  <br>
  <input type="submit" value="Submit">
</form>


1

Tôi đã sử dụng toán tử trải rộngmột số để kiểm tra ít nhất một phần tử trong mảng vượt qua bài kiểm tra.

Tôi chia sẻ cho ai quan tâm.

var checked = [...document.getElementsByName("gender")].some(c=>c.checked);
console.log(checked);
<input type="radio" name="gender" checked value="Male" />
<input type="radio" name="gender"  value="Female" / >


0

Đây là giải pháp được mở rộng để không tiếp tục gửi và gửi cảnh báo nếu các nút radio không được kiểm tra. Tất nhiên điều này có nghĩa là bạn phải bỏ chọn chúng để bắt đầu!

if(document.getElementById('radio1').checked) {
} else if(document.getElementById('radio2').checked) {
} else {
  alert ("You must select a button");
  return false;
}

Chỉ cần nhớ đặt id ('radio1', 'radio2' hoặc bất cứ thứ gì bạn gọi nó) ở dạng cho mỗi nút radio hoặc tập lệnh sẽ không hoạt động.


Bạn chỉ có thể làm : if (!document.getElementById('radio1').checked && !document.getElementById('radio2').checked) { alert(); }.
insertusernamehere

0

Một ví dụ:

if (!checkRadioArray(document.ExamEntry.level)) { 
    msg+="What is your level of entry? \n"; 
    document.getElementById('entry').style.color="red"; 
    result = false; 
} 

if(msg==""){ 
    return result;  
} 
else{ 
    alert(msg) 
    return result;
} 

function Radio() { 
    var level = radio.value; 
    alert("Your level is: " + level + " \nIf this is not the level your taking then please choose another.") 
} 

function checkRadioArray(radioButtons) { 
    for(var r=0;r < radioButtons.length; r++) { 
        if (radioButtons[r].checked) { 
            return true; 
        } 
    } 
    return false; 
} 

0

Hình thức

<form name="teenageMutant">
  <input type="radio" name="ninjaTurtles"/>
</form>

Kịch bản

if(!document.teenageMutant.ninjaTurtles.checked){
  alert('get down');
}

Câu đố: http://jsfiddle.net/PNpUS/


0

Tôi chỉ muốn đảm bảo một cái gì đó được chọn (sử dụng jQuery):

// html
<input name="gender" type="radio" value="M" /> Male <input name="gender" type="radio" value="F" /> Female

// gender (required)
var gender_check = $('input:radio[name=gender]:checked').val();
if ( !gender_check ) {
    alert("Please select your gender.");
    return false;
}

0

Nếu bạn muốn vanilla JavaScript, đừng muốn làm lộn xộn đánh dấu của bạn bằng cách thêm ID trên mỗi nút radio và chỉ quan tâm đến các trình duyệt hiện đại , cách tiếp cận chức năng sau đây đối với tôi hơn một chút so với vòng lặp for:

<form id="myForm">
<label>Who will be left?
  <label><input type="radio" name="output" value="knight" />Kurgan</label>
  <label><input type="radio" name="output" value="highlander" checked />Connor</label>
</label>
</form>

<script>
function getSelectedRadioValue (formElement, radioName) {
    return ([].slice.call(formElement[radioName]).filter(function (radio) {
        return radio.checked;
    }).pop() || {}).value;
}

var formEl = document.getElementById('myForm');
alert(
   getSelectedRadioValue(formEl, 'output') // 'highlander'
)
</script>

Nếu không được chọn, nó sẽ trả về undefined(mặc dù bạn có thể thay đổi dòng trên để trả về một thứ khác, ví dụ: để được falsetrả về, bạn có thể thay đổi dòng có liên quan ở trên thành }).pop() || {value:false}).value;:).

Ngoài ra còn có cách tiếp cận polyfill hướng tới vì giao diện RadioNodeList sẽ giúp bạn dễ dàng sử dụng một thuộc valuetính trong danh sách các thành phần vô tuyến con mẫu (được tìm thấy trong đoạn mã trên formElement[radioName]), nhưng có vấn đề riêng: Cách polyfill RadioNodeList ?


0

Điều này cũng hoạt động, tránh gọi một id phần tử nhưng gọi nó bằng cách sử dụng như một phần tử mảng.

Đoạn mã sau dựa trên thực tế là một mảng, được đặt tên là nhóm radiobuttons, được tạo bởi các phần tử radiobuttons theo cùng thứ tự như chúng được khai báo trong tài liệu html:

if(!document.yourformname.yourradioname[0].checked 
   && !document.yourformname.yourradioname[1].checked){
    alert('is this working for all?');
    return false;
}

0

HTML:

<label class="block"><input type="radio" name="calculation" value="add">+</label>
<label class="block"><input type="radio" name="calculation" value="sub">-</label>
<label class="block"><input type="radio" name="calculation" value="mul">*</label>
<label class="block"><input type="radio" name="calculation" value="div">/</label>

<p id="result"></p>

JAVAScript:

var options = document.getElementsByName("calculation");

for (var i = 0; i < options.length; i++) {
    if (options[i].checked) {
        // do whatever you want with the checked radio
        var calc = options[i].value;
        }
    }
    if(typeof calc == "undefined"){
        document.getElementById("result").innerHTML = " select the operation you want to perform";
        return false;
}

-2

Cung cấp cho các nút radio, cùng tên nhưng ID khác nhau.

var verified1 = $('#SOME_ELEMENT1').val();
var verified2 = $('#SOME_ELEMENT2').val();
var final_answer = null;
if( $('#SOME_ELEMENT1').attr('checked') == 'checked' ){
  //condition
  final_answer = verified1;
}
else
{
  if($('#SOME_ELEMENT2').attr('checked') == 'checked'){
    //condition
    final_answer = verified2;
   }
   else
   {
     return false;
   }
}
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.