Bagaimana cara mendapatkan nilai tombol radio yang dipilih?

265

Saya mengalami beberapa masalah aneh dengan program JS saya. Saya memiliki ini berfungsi dengan baik tetapi untuk beberapa alasan tidak lagi berfungsi Saya hanya ingin menemukan nilai tombol radio (mana yang dipilih) dan mengembalikannya ke variabel. Untuk beberapa alasan ia terus kembali undefined.

Ini kode saya:

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>
mkyong
sumber
1
Kemungkinan duplikat dari Cara mendapatkan nilai tombol radio yang dipilih menggunakan js
Damjan Pavlica

Jawaban:

395

Anda dapat melakukan sesuatu seperti ini:

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

Sunting: Terima kasih HATCHA dan jpsetung untuk saran edit Anda.

jaby
sumber
5
Itu berfungsi untuk jquery 1.7 tetapi sekarang sintaks yang benar untuk jQuery 1.9 adalah $ ('input [name = "genderS"]: checked'). Val (); (hapus @)
jptsetung
1
Saya percaya @sintaksnya sudah ditinggalkan bahkan lebih awal dari itu (jquery 1.2)
Tom Pietrosanti
@TomPietrosanti dokumentasi tampaknya sedikit tidak aktif, jsfiddle.net/Xxxd3/608 berfungsi di <1.7.2 tetapi tidak di> 1.8.3. Apapun, @pasti harus dihapus
jbabey
Ya, sepertinya mereka meninggalkan beberapa kompatibilitas di belakang sana, tetapi tidak memperbarui dokumen yang cocok. Saya ingat beberapa kehebohan ketika mereka menjatuhkan beberapa fitur usang yang masih banyak digunakan, jadi mereka menambahkan dukungan kembali. Mungkin itu sebabnya ...
Tom Pietrosanti
2
document.querySelector()mungkin harus menjadi pendekatan yang disarankan dalam JavaScript langsung sekarang.
Dave
338

Ini berfungsi dengan penjelajah mana pun.

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

Ini adalah cara sederhana untuk mendapatkan nilai dari jenis input apa pun. Anda juga tidak perlu menyertakan jalur jQuery.

Giorgos Tsakonas
sumber
23
Menggunakan document.querySelector () adalah jawaban javascript murni: developer.mozilla.org/en-US/docs/Web/API/document.querySelector
AdamJonR
8
Jika Anda menyimpannya dalam variabel dan tidak ada radiobutton yang dipilih, Anda menyebabkan browser berhenti. Konsol mengatakan: TypeError document.querySelector(...)adalah null.
hubungi saya
14
Itu hanya bekerja jika ada yang dipilih. Jadi Anda harus memeriksanya sebelumnya. var selector = document.querySelector('input[name="genderS"]:checked'); if(selector) console.log(selector.value);
Markus Zeller
Saya bekerja dengan Templat di Meteor, dan :checkedtrik itu benar-benar berhasil untuk saya .. bagi saya perbaikan untuk membaca tombol radio dari formulir Templat Meteor adalahaccountType = template.find("[name='optradio']:checked").value;
zipzit
Saya memiliki satu lingkungan perusahaan di mana ia tidak bekerja secara konsisten pada IE11 - semacam mode kompatibilitas mundur.
Steve Black
35
document.forms.your-form-name.elements.radio-button-name.value
imran ansari
sumber
5
Ini juga berfungsi:document.forms.your-form-name.name-shared-by-radio-buttons.value
Web_Designer
7
Saya pikir kebanyakan orang mengabaikan ini. Jawaban yang diterima bekerja. Jawaban Giorgos Tsakonas lebih baik. Tetapi yang ini adalah jawaban yang secara fundamental benar. Ini adalah cara kerja tombol radio. Perhatikan bahwa jika tidak ada yang dipilih, ia mengembalikan string kosong.
Mark Goldfain
@Web_Designer Haruskah komentar Anda juga bukan jawaban yang nyata?
Ideogram
Ini tidak berfungsi jika input radio Anda tidak dalam bentuk jadi saya tidak berpikir ini adalah jawaban yang lebih baik daripada querySelector satu, mungkin keduanya harus digabungkan.
Tomáš Hübelbauer
cara ini tidak berfungsi jika radio Anda ada di dalam label
Igor Fomenko
19

Sejak jQuery 1.8, sintaks yang benar untuk kueri adalah

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

Tidak $('input[@name="genderS"]:checked').val();lagi, yang berfungsi di jQuery 1.7 (dengan @ ).

jptsetung
sumber
16

Versi ECMAScript 6

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

Solusi paling sederhana:

 document.querySelector('input[name=genderS]:checked').value
Bobur Saidov
sumber
1
Dipilih untuk dua alasan: 1. berfungsi. 2. itu bukan jawaban jquery lumpuh.
John
21
Ini adalah salinan tepat dari jawaban @Giorgos Tsakonas di atas yang diberikan setahun sebelumnya.
T Nguyen
7

Coba ini

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

Seekor biola di sini .

Alfa
sumber
6

Sunting: Seperti yang dikatakan oleh Chips_100 Anda harus menggunakan:

var sizes = document.theForm[field];

langsung tanpa menggunakan variabel tes.


Jawaban lama:

Bukankah seharusnya Anda evalsuka ini?

var sizes = eval(test);

Saya tidak tahu cara kerjanya, tetapi bagi saya Anda hanya menyalin sebuah string.

Michael Laffargue
sumber
eval bukan pilihan terbaik di sini ... Anda mungkin ingin mengatakan var sizes = document.theForm[field];dan menghapus tugas pertama, jadi tidak menggunakan testvariabel lagi.
Dennis
Sepengetahuan saya, akankah eval bekerja seperti apa adanya? Atau hanya bekerja dengan eval('var sizes=document.theForm.' + field)?
Michael Laffargue
pernyataan eval dalam jawaban Anda var sizes = eval(test);akan bekerja seperti itu (saya hanya mengetesnya di pembakar).
Dennis
Itu lebih masuk akal, tapi saya mendapatkan pesan kesalahan "Token tak terduga [" di baris tempat saya meletakkan fieldtanda kurung. Ada tebakan mengapa?
mkyong
4

Ini murni JavaScript, berdasarkan jawaban oleh @Fontas tetapi dengan kode pengaman untuk mengembalikan string kosong (dan menghindari a TypeError) jika tidak ada tombol radio yang dipilih:

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

Kode rusak seperti ini:

  • Baris 1: dapatkan referensi ke kontrol yang (a) merupakan <input>tipe, (b) memiliki nameatribut genderS, dan (c) dicentang.
  • Baris 2: Jika ada kontrol seperti itu, kembalikan nilainya. Jika tidak, kembalikan string kosong. The genderSRadiovariabel truthy jika Jalur 1 temuan kontrol dan nol / falsey jika tidak.

Untuk JQuery, gunakan jawaban @ jbabey, dan perhatikan bahwa jika tidak ada tombol radio yang dipilih, ia akan kembali undefined.

Ed Gibbs
sumber
4

Jika seseorang mencari jawaban dan mendarat di sini seperti saya, dari Chrome 34 dan Firefox 33 Anda dapat melakukan hal berikut:

var form = document.theForm;
var radios = form.elements['genderS'];
alert(radios.value);

atau lebih sederhana:

alert(document.theForm.genderS.value);

refrence: https://developer.mozilla.org/en-US/docs/Web/API/RadioNodeList/value

ashraf aaref
sumber
3

Berikut adalah Contoh untuk Radio di mana atribut Checked = "checked" tidak digunakan

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/ [ Klik Temukan tanpa memilih Radio apa pun ]

Sumber: http://bloggerplugnplay.blogspot.in/2013/01/validateget-checked-radio-value-in.html

Kode Mata-mata
sumber
2

Berikut cara yang bagus untuk mendapatkan nilai tombol radio yang dicentang dengan JavaScript biasa:

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

Sumber: https://ultimatecourses.com/blog/get-value-checked-radio-buttons

Menggunakan HTML ini:

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

Anda juga dapat menggunakan Array Find the checkedproperty untuk menemukan barang yang dicentang:

Array.from(form.elements.characters).find(radio => radio.checked);
Rachie M
sumber
1

Menggunakan javascript murni, Anda bisa menangani referensi ke objek yang mengirim acara.

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

misalkan Anda perlu menempatkan baris tombol radio yang berbeda dalam formulir, masing-masing dengan nama atribut yang terpisah ('option1', 'option2' dll) tetapi dengan nama kelas yang sama. Mungkin Anda membutuhkannya dalam beberapa baris di mana mereka masing-masing akan mengirimkan nilai berdasarkan skala 1 hingga 5 yang berkaitan dengan pertanyaan. Anda dapat menulis javascript seperti:

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

Saya juga akan memasukkan hasil akhir ke dalam elemen formulir tersembunyi untuk dikirimkan bersama dengan formulir.

Bruce Tong
sumber
1
 document.querySelector('input[name=genderS]:checked').value
alluma
sumber
0

Jika mungkin bagi Anda untuk menetapkan Id untuk elemen formulir Anda (), cara ini dapat dianggap sebagai cara alternatif yang aman (khususnya ketika nama elemen grup radio tidak unik dalam dokumen):

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

dll kemudian gunakan saja

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

Atau

   $('input[name="rdbExampleInfo"]:checked').val();
Jom George
sumber
-5
    var value = $('input:radio[name="radiogroupname"]:checked').val();
Ninad Nagwekar
sumber