Bagaimana saya dapat memeriksa apakah tombol radio dipilih dengan JavaScript?

271

Saya memiliki dua tombol radio dalam bentuk HTML. Kotak dialog muncul ketika salah satu bidang adalah nol. Bagaimana saya dapat memeriksa apakah tombol radio dipilih?

cupu
sumber
tautan ini dapat membantu Anda stackoverflow.com/questions/6654601/…
Ahmed Elbendary

Jawaban:

330

Mari kita berpura-pura memiliki HTML seperti ini

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

Untuk validasi sisi klien, berikut ini beberapa Javascript untuk memeriksa yang dipilih:

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

Di atas bisa dibuat lebih efisien tergantung pada sifat tepat markup Anda, tetapi itu sudah cukup untuk membantu Anda memulai.


Jika Anda hanya ingin melihat apakah ada tombol radio yang dipilih di mana saja di halaman, PrototypeJS membuatnya sangat mudah.

Berikut adalah fungsi yang akan mengembalikan true jika setidaknya satu tombol radio dipilih di suatu tempat di halaman. Sekali lagi, ini mungkin perlu diubah tergantung pada HTML spesifik Anda.

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

Untuk validasi sisi server (ingat, Anda tidak bisa bergantung sepenuhnya pada Javascript untuk validasi!) , Itu akan tergantung pada bahasa pilihan Anda, tetapi Anda akan mengecek gendernilai string permintaan.

Mark Biek
sumber
1
tetapi apa yang ingin saya periksa apakah tombol radio dipilih terlepas dari apa yang dipilih.
noob
1
Saya tidak benar-benar mengikuti apa yang Anda katakan? Tertarik apakah tombol radio APAPUN dipilih atau tidak?
Mark Biek
Iya. karena formulir tidak dapat dikirimkan jika tidak semua bidang diisi termasuk tombol radio.
noob
if (document.getElementById ('gender_Male') .checked || document.getElementById ('gender_Female') diperiksa) waspada ('beberapa radiobox saya dicentang');
Havenard
Saya telah memodifikasi contoh Prototipe saya untuk mengambil keuntungan dari pelajaran pemilih CSS yang baru saya pelajari dari R. Bemrose.
Mark Biek
111

Dengan jQuery , itu akan menjadi sesuatu seperti

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

Biarkan saya memecahnya menjadi beberapa bagian untuk menutupinya dengan lebih jelas. jQuery memproses sesuatu dari kiri ke kanan.

input[name=gender]:checked
  1. input membatasinya untuk memasukkan tag.
  2. [name=gender] batasi pada tag dengan nama gender di dalam grup sebelumnya.
  3. :checked batasi pada kotak centang / tombol radio yang dipilih dalam grup sebelumnya.

Jika Anda ingin menghindari ini sama sekali, tandai salah satu tombol radio sebagai dicentang ( checked="checked") dalam kode HTML, yang akan menjamin bahwa satu tombol radio selalu dipilih.

Powerlord
sumber
17
-1 untuk mengajukan pustaka saat tidak diminta. Dengan cara ini kita bisa menjawab semuanya dengan "include library x, gunakan x.doWhatYouNeed ()". Tidak ada nyala yang dimaksudkan, saya benar-benar berpikir pertanyaan ini harus dijawab dengan javascript murni (dan akhirnya menunjukkan betapa mudahnya dengan perpustakaan)
Riccardo Galli
23
@RiccardoGalli: Banyak orang sudah menggunakan jQuery, maka mengapa jawabannya dimulai dengan "Dengan jQuery, itu akan menjadi sesuatu seperti" kalau-kalau mereka sudah menggunakannya.
Powerlord
1
Adakah yang tahu apakah mungkin untuk menyeleksi penyeleksi seperti ini? masukan [nama = jenis kelamin] [jenis = radio] atau masukan [nama = jenis kelamin, jenis = radio] hanya untuk validasi tambahan?
Ty_
@ EW-CodeMonkey Cara pertama yang Anda sebutkan harus berfungsi .
Powerlord
81

Cara JavaScript vanilla

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;       
    }
}
Russ Cam
sumber
2
Yah aku punya masalah yang hampir sama sekarang dan kode Anda sangat membantu
MoreThanChaos
2
Ini akan memberi Anda nilai dari tombol radio yang terakhir diperiksa. Jika Anda memiliki beberapa grup radio, ini mungkin tidak akan memberi Anda nilai yang benar.
styfle
@styfle Ini berfungsi dengan baik untuk pertanyaan OP di mana ia menyatakan bahwa hanya ada dua tombol radio dalam formulir di halaman. Solusinya akan berbeda untuk skenario masalah yang berbeda seperti lebih dari dua tombol radio, beberapa grup radio, dll :)
Russ Cam
2
@RussCam Ya ini berfungsi untuk halaman kecil dengan hanya 2 tombol radio, tapi saya menambahkan komentar saya untuk membuat jawabannya lengkap. Cara terbaik untuk mendapatkan elemen tombol radio adalah dengan name.
styfle
Cara yang lebih baik adalah memilih elemen radio berdasarkan kelas tertentu, dan kemudian mengelompokkan berbagai kelompok elemen radio ke dalam kelas yang berbeda. Jika tidak, solusi ini hanya berfungsi untuk satu grup elemen radio tanpa elemen input form lainnya.
Oliver
15

Hanya mencoba untuk memperbaiki solusi Russ Cam dengan beberapa gula pemilih CSS yang dilemparkan dengan JavaScript vanilla.

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

Tidak perlu jQuery di sini, querySelectorAll cukup didukung secara luas sekarang.

Sunting: memperbaiki bug dengan pemilih css, saya telah menyertakan tanda kutip, meskipun Anda dapat menghilangkannya, dalam beberapa kasus Anda tidak dapat melakukannya sehingga lebih baik meninggalkannya.

Matt McCabe
sumber
mungkin itu harus var radio = document.querySelectorAll ('input [type = "radio"]: dicentang');
Md. Shafiqur Rahman
@ ShafiqurRahman Anda benar sekali, saya akan memperbarui jawaban saya, saya pikir Anda tidak perlu tanda kutip di radio.
Matt McCabe
3
+1 untuk JavaScript Vanilla. Saya akan selalu menggunakan tanda kutip di sekitar nilai atribut, karena untuk beberapa nilai atribut lainnya, (seperti a[href^="http://"]) mereka akan diperlukan, dan konsistensi lebih dapat dipertahankan. Selain itu, ini memungkinkan deklarasi atribut cocok dengan HTML yang sesuai.
Manngo
11

Kode HTML

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

Kode 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");
}
Amit sharma
sumber
2
Peringatan: kode ini mengembalikan peringatan munculan segera setelah halaman dimuat.
samthebrand
11

Anda dapat menggunakan skrip sederhana ini. Anda mungkin memiliki beberapa tombol radio dengan nama dan nilai yang sama.

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.
}
Neri
sumber
+1. Ini adalah solusi Vanilla JS terpendek untuk mendapatkan elemen radio yang diperiksa, apa yang kita butuhkan dalam beberapa kasus. Saya pikir Anda punya jawaban terbaik karena ini. Dan hanya untuk mendapatkan nilai yang bisa kita gunakandocument.forms[0].elements['nameOfRadioList'].value
Bharata
9

Skrip di halaman ini membantu saya membuat skrip di bawah ini, yang menurut saya lebih lengkap dan universal. Pada dasarnya itu akan memvalidasi sejumlah tombol radio dalam formulir, yang berarti bahwa itu akan memastikan bahwa opsi radio telah dipilih untuk masing-masing dari kelompok radio yang berbeda dalam formulir. misalnya dalam formulir tes di bawah ini:

   <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();">

Skrip RadioValidator akan memastikan bahwa jawaban telah diberikan untuk 'test1' dan 'test2' sebelum dikirimkan. Anda dapat memiliki banyak grup radio dalam formulir, dan itu akan mengabaikan elemen formulir lainnya. Semua jawaban radio yang hilang akan ditampilkan di dalam sembulan peringatan tunggal. Ini dia, saya harap ini membantu orang. Selamat datang di setiap perbaikan bug atau modifikasi yang membantu :)

<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>
Trelamenos
sumber
6

Perhatikan perilaku ini dengan jQuery ketika mendapatkan nilai input 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() ); 

});

Jadi $('input[name="myRadio"]').val()tidak mengembalikan nilai dicentang dari input radio, seperti yang Anda harapkan - itu mengembalikan nilai tombol radio pertama.

Bradley Flood
sumber
4

Dengan mootools ( http://mootools.net/docs/core/Element/Element )

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)
marbel82
sumber
// Periksa apakah sesuatu dalam grup radio dipilih jika ($$ ('input [nama = radiosname]: dicentang'). Panjang> 0) persis seperti yang saya butuhkan
Steve Johnson
3

ini adalah fungsi utilitas yang saya buat untuk mengatasi masalah ini

    //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;
            }
        }
    }
Gene Myers
sumber
1
Suka ini karena (kembali) kegunaan dan kesederhanaannya. Juga, nilai yang dikembalikan dapat ditangani oleh pernyataan switch yang bagus.
JGurtz
3

Ini akan berlaku untuk tombol radio yang berbagi nama yang sama, tidak diperlukan JQuery.

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

Jika kita berbicara tentang kotak centang dan kami ingin daftar dengan kotak centang dicentang berbagi nama:

var x = Array.prototype.filter.call(document.getElementsByName('checkThing'), function(x) { return x.checked });
Uxio
sumber
3
if(document.querySelectorAll('input[type="radio"][name="name_of_radio"]:checked').length < 1)
Md. Shafiqur Rahman
sumber
2

hanya sedikit modifikasi untuk Mark Biek;

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

dan kode Javascript untuk memeriksa apakah tombol radio dipilih

<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>
Parag
sumber
1
getElementsByName () mengembalikan HTMLCollection, yang tidak memiliki properti yang dicentang, jadi saya tidak percaya potongan JavaScript yang Anda poskan akan berfungsi sebagaimana mestinya. Anda harus mengulang elemen di HTMLCollection dan melihat apakah ada yang diperiksa, seperti yang disarankan orang lain.
Rudi
Terima kasih. Anda benar. :) memperbarui balasan saya, sehingga tidak ada lagi orang yang mendapatkan info yang salah.
Parag
2

Ada cara yang sangat canggih Anda dapat memvalidasi apakah ada tombol radio yang diperiksa dengan ECMA6 dan metode .some().

Html:

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

Dan javascript:

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

let radioButtonsArray = Array.from(htmlNodes);

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

isAnyRadioButtonCheckedakan ada truejika beberapa tombol radio dicentang dan falsejika tidak ada yang dicentang.

OlegI
sumber
2

Kembalikan semua elemen yang dicentang di tombol radio

  Array.from(document.getElementsByClassName("className")).filter(x=>x['checked']);
Ashish
sumber
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 "";
}
keithics
sumber
1

Dengan JQuery, cara lain untuk memeriksa status tombol radio saat ini adalah dengan mendapatkan atribut 'diperiksa'.

Sebagai contoh:

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

Dalam hal ini Anda dapat memeriksa tombol menggunakan:

if ($("#gender_male").attr("checked") == true) {
...
}
Claudio Query
sumber
1
Dalam kasus saya, nilai $("#gender_male").attr("checked")adalah string "checked"dan bukan boolean.
Koks_rs
1

Kode ini akan mengingatkan tombol radio yang dipilih ketika formulir dikirimkan. Ini digunakan jQuery untuk mendapatkan nilai yang dipilih.

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

Christian Juth
sumber
1

Saya menggunakan operator spread dan beberapa untuk memeriksa setidaknya satu elemen dalam array yang lulus tes.

Saya berbagi untuk siapa perhatian.

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

Hien Nguyen
sumber
0

Ini adalah solusi yang dikembangkan untuk tidak meneruskan pengiriman dan mengirim peringatan jika tombol radio tidak dicentang. Tentu saja ini berarti Anda harus menghapusnya sejak awal!

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

Hanya ingat untuk mengatur id ('radio1', 'radio2' atau apa pun namanya) dalam bentuk untuk masing-masing tombol radio atau skrip tidak akan berfungsi.

Steve
sumber
Anda hanya bisa melakukan: if (!document.getElementById('radio1').checked && !document.getElementById('radio2').checked) { alert(); }.
masukkan nama pengguna di sini
0

Sebuah contoh:

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; 
} 
pengguna2194064
sumber
0

Formulir

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

Naskah

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

Biola: http://jsfiddle.net/PNpUS/

gaby de wilde
sumber
0

Saya hanya ingin memastikan sesuatu dipilih (menggunakan 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;
}

sumber
0

Jika Anda ingin vanilla JavaScript, tidak ingin mengacaukan markup Anda dengan menambahkan ID pada setiap tombol radio, dan hanya peduli dengan browser modern , pendekatan fungsional berikut sedikit lebih enak untuk saya daripada for for loop:

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

Jika tidak ada yang dicentang, maka akan kembali undefined(meskipun Anda dapat mengubah baris di atas untuk mengembalikan sesuatu yang lain, misalnya, untuk falsedikembalikan, Anda dapat mengubah baris yang relevan di atas menjadi:}).pop() || {value:false}).value; :).

Ada juga pendekatan polyfill berwawasan ke depan karena antarmuka RadioNodeList harus membuatnya mudah untuk hanya menggunakan valueproperti pada daftar elemen radio form anak (ditemukan dalam kode di atas sebagai formElement[radioName]), tetapi itu memiliki masalah sendiri: Cara polyfill RadioNodeList ?

Brett Zamir
sumber
0

Ini juga berfungsi, menghindari memanggil id elemen tetapi memanggilnya menggunakan elemen array.

Kode berikut didasarkan pada fakta bahwa array, dinamai sebagai grup radiobuttons, disusun oleh elemen radiobuttons dalam urutan yang sama dengan yang dinyatakan dalam dokumen html:

if(!document.yourformname.yourradioname[0].checked 
   && !document.yourformname.yourradioname[1].checked){
    alert('is this working for all?');
    return false;
}
Pietro Di Mascio
sumber
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>

Skrip JAVAS:

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;
}
vijay rami
sumber
-3

Berikan tombol radio, nama yang sama tetapi ID berbeda.

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;
   }
}
CG_DEV
sumber