Seçilen radyo düğmesinin değeri nasıl alınır?


316

Seçilen değeri bir grup radyo düğmesinden almak istiyorum.

İşte benim HTML:

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

İşte benim .js:

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;

Tanımsız olmaya devam ediyorum.


50
Burada jQuery kullanmıyorsunuz, ancak eğer isterseniz, bunu kullanabilirsiniz:$("input[type='radio'][name='rate']:checked").val();
GJK

O nesneyi neden inceleyemiyorsun? Yine de kullanmanız gerekiyor.checked
Amol M Kulkarni


Bunun gerekli olup olmadığından emin değilim, ancak radyo düğmelerini <form></form>kabın içine koymak iyi bir alışkanlık .
Kamil

2
Js

Yanıtlar:


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

Rate öğesi a'dır div, dolayısıyla bir değeri olmayacaktır. Muhtemelen buradan undefinedgeliyor.

checkedMülkiyet eleman seçili olup olmadığını söyleyecektir:

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

229
Jquery olurdu$("input[name=rate]:checked").val()
Kamran Ahmed

1
Anlamıyorum, aynı kimliğe sahip iki öğe var mı?
mzalazar

3
@mzalazar Hayır, her radyo düğmesinin kendi kimliği vardır, ancak hepsinin adı aynıdır, bu da onları bir gruba koyar, böylece birini seçerseniz diğerinin seçimi kaldırılır. Kamran Ahmed yanıtı ile gruptaki radyo düğmelerinden hangisinin seçildiğini kontrol edebilir ve sadece seçilen (işaretli) olanın değerini alabilirsiniz.
Broco

4
mahdavipanah'ın hemen üzerindeki kod (ile [checked]) niteliğini arar (yani başlangıç ​​durumu). Bunun yerine :checked, özelliği (yani, mevcut durumu) arar ve neredeyse her zaman istediğiniz şeydir.
Gras Double

5
Javascript'te olurdudocument.querySelectorAll("input[name=rate]:checked")[0].value
Vincent McNabb

519

Bu IE9 ve üstü ve diğer tüm tarayıcılarda çalışır.

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

13
Elbette querySelector öğesinin null döndürüp döndürmediğini kontrol etmeniz gerekir. Hiçbir radyo düğmesi işaretlenmemişse durum budur.
Robert

18
@KamranAhmed: jQuery çözümünüz çok daha yüksek bir maliyetle geliyor.

5
ParthikGosar: IE8 :checkedseçiciyi desteklemiyor .

14
Etrafındaki tırnak işaretlerinin rategerekli olmadığını unutmayın.
mbomb007

1
Yukarıdakilere profil ekleyebildiğiniz ve / veya çağrının arkasındaki uygulamayı inceleyene kadar yukarıda belirtilenlerin performansı hakkında yerel kod çağıran diğer herhangi bir oneliner hakkında söyleyebileceğinizden daha fazlasını söyleyemezsiniz. Tarayıcının :checkedöğeleri nasıl bulmayı başardığını tahmin etmek için yeterli bilgimiz yok - belki de "karma ve önbelleğe alınmış" her şeye sahiptir ve bu bir O(1)işlemdir. Sorgu zamanının sayfadaki öğelerin sayısıyla büyüdüğünü göstermek için profilli olmadıkça veya arkasındaki tarayıcı kaynak kodunu anlamadıysanız söyleyemezsiniz.
amn

144

checkedÖzelliği kullanarak değeri alabilirsiniz .

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
Sadece bir telsizin kontrol edilebileceği göz önüne alındığında, normalde blok içindeki bir breakveya returnifadenin ifdöngüden ek geçişleri durdurmasını beklerim. Küçük bir nokta, ama iyi bir stil.
RobP

1
Bu, bu soru için en temiz vanilya uygulamasıdır. Kudos!
SeaWarrior404

37

Kenarda yaşayan insanlar için:

Artık RadioNodeList olarak adlandırılan bir şey var ve değer özelliğine erişmek o anda denetlenen girişin değerini döndürecektir. Bu, gönderilen cevapların çoğunda gördüğümüz gibi, ilk olarak 'kontrol edilen' girişin filtrelenmesi gerekliliğini ortadan kaldıracaktır.

Örnek Form

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

İşaretli değeri almak için şöyle bir şey yapabilirsiniz:

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

JSFiddle bunu kanıtlayacak: http://jsfiddle.net/vjop5xtq/

Bunun Firefox 33'te uygulandığını lütfen unutmayın (Diğer tüm büyük tarayıcılar bunu destekliyor gibi görünüyor). Eski tarayıcıların RadioNodeListdüzgün çalışması için bir polfyill gerekir


1
form.elements["test"].valueChrome'da çok iyi çalışıyor [Sürüm 49.0.2623.87 m].
Evan Hu

Bir form olmalı, örneğin bir div kullanamaz. Aksi halde bu FF 71.0'da çalışıyor.
Andrew

16

Benim için çalışan biri aşağıda api.jquery.com adresinden verilmiştir.

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

SelectedOption değişkeni seçilen radyo düğmesinin değerini içerir (yani) o1 veya o2


11

Başka bir (görünüşte daha eski) seçenek şu biçimi kullanmaktır: "document.nameOfTheForm.nameOfTheInput.value;" örn. 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>

Bir form içindeki öğeye adıyla başvurabilirsiniz. Orijinal HTML'niz bir form öğesi içermiyor.

Fiddle here (Chrome ve Firefox'ta çalışır): https://jsfiddle.net/Josh_Shields/23kg3tf4/1/


1
Bu çok eski eski DOM biçimidir ve artık belirli öğelerle sınırlı olduğu ve mevcut standartlara uymadığı için artık kullanılmamalıdır.
j08691

@ j08691 Ah tamam bana bildirdiğiniz için teşekkürler. Üniversite dersinde öğrendiğim şeylerden biri de bu. Oradan hiçbir şeye güvenmemek ve sadece çevrimiçi referansları kullanmak daha iyidir.
JHS

6
“... mevcut standartlara uymuyor.” ikna edici bir argüman değildir. Lütfen detaylandırın. Çalışırsa çalışır. Ayrıca, yalnızca seçilen seçeneğin 'Sabit Oran' olup olmadığını belirleyen, kabul edilen yanıttan daha az satırdır.
sıfırlar ve olanlar

Yukarıdaki keman Safari tarayıcısıyla (7.1.4) çalışmıyor gibi görünüyor. Değer tanımsız olarak gösterilir, radyo düğmesi durumlarının değiştirilmesi bunu etkilemez.
Stuart R. Jefferys

Evet, bu Edge tarayıcıyla da çalışmaz (40.15063.0.0). Bu şekilde kullanımdan kaldırılmışlarsa, garip görünüyor, çünkü bu daha basit ve mantıklıdır çünkü radyo düğmeleri doğalarına göre gruplandırılmıştır. Diğer yanıtların çoğu, onay kutularını işaretliyormuş gibi görünür.
mikato

10

Kullanım document.querySelector ( 'giriş [türü = radyo]: kontrol') değeri;. seçili onay kutusunun değerini almak için, name = cinsiyet vb. gibi değer almak için diğer özellikleri kullanabilirsiniz . lütfen snippet'in altından geçin kesinlikle size yardımcı olacaktır,

Çözüm

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>

Teşekkür ederim


7

HTML KODU:

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

JQUERY KODU:

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

Alacaksın

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

5

Javascript'te getElementById(), yukarıdaki kodda Id'in " " değerini kullanarak değerleri alabiliriz, bu nedenle değiştirmek için Id değil ad içermiyor

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

kodunuza göre bu oran değerini kullanın


5

Sorunun sorulmasından bu yana bir yıl geçti, ancak cevaplarda önemli bir iyileşmenin mümkün olduğunu düşündüm. Bir düğmenin kontrol edilip edilmediğini ve eğer öyleyse, değerinin ne olduğunu kontrol ettiği için bunu en kolay ve en çok yönlü komut dosyası olarak görüyorum:

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

İşlevi şu şekilde başka bir işlev içinde de çağırabilirsiniz:

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

5

Form öğenize myFormaşağıdaki değişken tarafından atıfta bulunulduğu ve radyo düğmelerinizin "my-radio-button-group-name" adını paylaştığı varsayıldığında , aşağıdakiler saf JavaScript ve standartlarla uyumludur (her yerde kullanılabilir olup olmadığını kontrol etmeme rağmen) ):

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

Yukarıdakiler , eğer varsa, ya da başka bir şekilde, işaretlenmiş (ya da aynı zamanda da denir) seçilmiş bir radyo düğmesi elemanının değerini verecektir null. Çözümün özü, namedItemözellikle radyo düğmeleriyle çalışan işlevdir.

Genellikle bir nesne döndürdüğü gibi HTMLFormElement.elements , HTMLFormControlsCollection.namedItem ve özellikle RadioNodeList.value öğelerine bakın .namedItem RadioNodeList

MDN kullanıyorum çünkü standart uyumluluğunu en azından büyük ölçüde izlemesine izin veriyor ve birçok WhatWG ve W3C yayınından daha kolay anlaşılabildiğinden.


Cevabı yazdığımda mevcut cevapları gözden kaçırdım ve paylaşmak istediklerime benzeyen hiçbir şey görmedim. Şimdi en az iki benzer çözümü kaçırdığımı görüyorum. Gerçi, hiç kimse benim kullandığım sözdizimini kullanarak kod önerilerini yazmadı, ama genel fikir aynı. Bilginize. Mesele, veya (belki bir spekülasyon) RadioNodeListgibi bir şey form.elements[name]veya form[name]yukarıdaki sözdizim aracılığıyla bir referansa ulaşmaktır.
amn

3

bir radyo düğmesini birçok kez doğrudan aramak, KONTROL düğmesinin değil İLK düğmesinin değerini verir. hangisinin kontrol edildiğini görmek için radyo düğmeleri arasında döngü yerine, onclickdaha sonra irade alınabilir bir değişken ayarlar bir javascript işlevini çağırmayı tercih .

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

hangi çağrıları yapar:

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

Ek avantaj, verileri tedavi edebilmem ve / veya bir düğmenin kontrolüne tepki verebilmemdir (bu durumda, SUBMIT düğmesini etkinleştir).


5
onchangekullanıcının klavyeyi kullanması durumunda olayı bağlamalısınız .
John Dvorak

2

Önceki önerilen işlevlerde iyileştirme:

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

Bu sorunu saf javascript ile almam, kontrol edilen düğümü bulmak, değerini bulmak ve diziden dışarı çıkarmaktır.

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

Ok işlevlerini kullandığımı unutmayın . Çalışan bir örnek için bu kemanı inceleyin .


Başka tagName === 'INPUT'bir etiket üzerinde çalışmadığınızdan emin olmak için bir onay eklerim input.
19'da Aternus


1

.find()İşaretli öğeyi seçmek için kullanabilirsiniz :

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

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

1
Array'ı tanımıyordum. Bul, sev! Ancak, hiçbir öğe kontrol edilmezse bu kırılacaktır.
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>

sonra...

var rate_value = rates.rate.value;

Bunun soruyu nasıl cevapladığını açıklayabilir misiniz?
15:17

" bir grup radyo düğmesinden seçilen değeri al ": rates.rate.valuenotrates.value
user7420100

Bu doğru bir cevap. document.getElementById("rates").rate.value[veya]document.forms[0].rate.value
Atika

0

değeri kimliğe göre kontrol et:

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

0

İstenilen çıktıyı almak için jQuery.click işlevini kullandım:

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

Umarım yardımcı olur.


0

Düğmeler
var myform = new FormData(getformbywhatever); myform.get("rate");
yukarıdaki bir formda ise, QuerySelector daha iyi bir çözümdür. Ancak, özellikle CSS hakkında bir ipucunuz yoksa, bu yöntemin anlaşılması kolaydır. Ayrıca, girdi alanlarının zaten bir biçimde olması muhtemeldir.
Kontrol etmedim, başka benzer çözümler var, tekrar için özür dilerim


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

bunun gibi bir radyo düğmesinin değerlerini alamaz

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

HTML etiketinin değerlerini almak için document.getElementById ('r1') kullanın. innerHtml
James Cluade

0

Kullanıyorsanız JQuery, lütfen radyo düğmesi grubu için feryat snippet'ini kullanın.

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

0

Basitçe kullanın: document.querySelector('input[rate][checked]').value


Benim için çalışmadı; yukarıdaki Pawan'dan benzer bir sözdizimine bakın. Olduğu gibi,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

Ayrıca, öğeler üzerinde forEach döngüsü bulunan düğmeler arasında geçiş yapabilirsiniz

    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>

JS

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

Php çok kolay
html sayfası

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

Formdan php'ye değer al

$radio=$_POST['radio'];<br/>
use php if(isset($_POST['submit']))<br/>
{<br/>
echo "you selected".$radio."thank u";<br/>
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.