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


265

JS programımda garip bir sorun yaşıyorum. Bu düzgün çalıştım ama nedense artık çalışmıyor. Sadece radyo düğmesinin (hangisi seçili) değerini bulmak ve bir değişkene geri döndürmek istiyorum. Nedense dönmeye devam ediyor undefined.

İşte benim kod:

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>

1
Js

Yanıtlar:


395

Bunun gibi bir şey yapabilirsiniz:

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

Düzenleme: Düzenleme önerileriniz için HATCHA ve jpsetung'a teşekkürler.


5
Bu jquery 1.7 için çalışıyordu ancak şimdi jQuery 1.9 için doğru sözdizimi $ ('input [name = "genderS"]: işaretli'). Val (); (@ çıkarın)
jptsetung

1
@Sözdiziminin bundan daha önce kullanımdan kaldırıldığına inanıyorum (jquery 1.2)
Tom Pietrosanti

@TomPietrosanti belgelerinin biraz kapalı olduğu görülüyor , jsfiddle.net/Xxxd3/608 <1.7.2'de çalışıyor ancak 1.8.3'te değil. Ne olursa olsun, @kesinlikle kaldırılmalıdır
jbabey

Evet, orada geriye dönük uyumluluk bırakmışlar, ancak dokümanları eşleşecek şekilde güncellemediler. Hala yaygın olarak kullanımda olan bazı kullanım dışı özellikleri bıraktıklarında bazı çemberleri hatırlıyorum, bu yüzden tekrar destek eklediler. Belki de bu yüzden ...
Tom Pietrosanti

2
document.querySelector()muhtemelen düz JavaScript'te önerilen yaklaşım şimdi olmalıdır.
Dave

337

Bu herhangi bir kaşif ile çalışır.

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

Bu, herhangi bir giriş türünün değerini almanın basit bir yoludur. Ayrıca do not jQuery yolu içermesi gerekir.


23
Document.querySelector () kullanmak saf bir javascript cevabıdır: developer.mozilla.org/en-US/docs/Web/API/document.querySelector
AdamJonR

8
Bir değişken belleğinde saklarsanız ve hiçbir radyo düğmesi seçilmezse, tarayıcının durmasına neden olursunuz. Konsol diyor ki: TypeError document.querySelector(...)olduğunu null.
beni ara

14
Bu yalnızca biri seçildiğinde çalışır. Bu yüzden daha önce kontrol etmelisiniz. var selector = document.querySelector('input[name="genderS"]:checked'); if(selector) console.log(selector.value);
Markus Zeller

:checkedaccountType = template.find("[name='optradio']:checked").value;
Meteor'da

IE11 üzerinde sürekli çalışmayan bir kurumsal ortamım var - bir çeşit geriye dönük uyumluluk modu.
Steve Black

35
document.forms.your-form-name.elements.radio-button-name.value

5
Bu da işe yarıyor:document.forms.your-form-name.name-shared-by-radio-buttons.value
Web_Designer

7
Sanırım çoğu insan buna bakmıyor. Kabul edilen cevap işe yarıyor. Giorgos Tsakonas'ın cevabı daha iyi. Ancak bu temel olarak doğru cevaptır. Bu, radyo düğmelerinin aslında nasıl çalıştığıdır. Hiçbir şey seçilmemişse boş bir dize döndürdüğünü unutmayın.
Mark Goldfain

@Web_Designer Yorumunuz gerçek bir cevap olmamalı mı?
İdeogram

Eğer radyo girişi bir formda değilse bu çalışmaz, bu yüzden bu querySelector bir daha iyi bir cevap olduğunu düşünmüyorum, belki de bu iki birleştirilmelidir.
Tomáš Hübelbauer

radyolarınız etiketlerin içindeyse bu şekilde çalışmaz
Igor Fomenko

19

JQuery 1.8 olduğundan, sorgu için doğru sözdizimi

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

Değil $('input[@name="genderS"]:checked').val();, artık ile (jQuery 1.7 çalışan hangi @ ).


16

ECMAScript 6 sürümü

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

16

En basit çözüm:

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

1
İki nedenden dolayı oy aldı: 1. işe yarıyor. 2. topal bir jquery cevap değildi.
John

21
Bu @Giorgos Tsakonas'ın bir yıl önce verilen cevabının tam bir kopyası.
T Nguyen

7

Bunu dene

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

Burada bir keman .


6

Düzenleme: Chips_100 tarafından söylendiği gibi kullanmalısınız:

var sizes = document.theForm[field];

doğrudan test değişkenini kullanmadan.


Eski cevap:

Bunu evalsevmez misin?

var sizes = eval(test);

Bunun nasıl çalıştığını bilmiyorum, ama bana göre sadece bir dize kopyalıyorsunuz.


eval burada en iyi seçenek değil ... var sizes = document.theForm[field];ilk ödevi söylemek ve silmek isteyebilirsiniz , bu yüzden testartık değişken kullanmayın .
Dennis

Bildiğim kadarıyla, işi olduğu gibi değerlendirir misiniz? Yoksa sadece ile çalışır eval('var sizes=document.theForm.' + field)mı?
Michael Laffargue

Cevabınızdaki eval ifadesi var sizes = eval(test);bu şekilde çalışır (sadece kundakçıda test ettim).
Dennis

Bu daha mantıklı, ancak fieldköşeli parantez içine koyduğum satırda "Beklenmeyen simge [" hatası alıyorum . Neden olduğuna dair herhangi bir tahmin var mı?
mkyong

4

Bu, @Fontas'ın cevabına dayanan saf bir JavaScripttir, ancak TypeErrorseçilen bir radyo düğmesi yoksa boş bir dize döndürmek (ve a'yı önlemek ) için güvenlik koduna sahiptir :

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

Kod şu şekilde bozulur:

  • Satır 1: (a) bir <input>tür, (b) birname özniteliği olduğu genderSve (c) işaretli olduğu kontrole .
  • Satır 2: Böyle bir kontrol varsa değerini döndürün. Yoksa boş bir dize döndürün. genderSRadioDeğişken truthy olan Hat 1 bulur kontrolü ve null / Falsey bunları yapmazsa eğer.

JQuery için @ jbabey yanıtını kullanın ve seçili bir radyo düğmesi yoksa geri döneceğini unutmayın undefined.



3

İşte hiçbir Checked = "işaretli" özelliğinin kullanılmadığı Radyolar için bir Örnek

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/ [ Herhangi bir Radyo seçmeden Bul'u tıklayın ]

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


2

Kontrol edilen radyo düğmesinin değerini düz JavaScript ile almanın güzel bir yolu:

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

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

Bu HTML'yi kullanarak:

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

Ayrıca kullanım olabilir Dizi bulchecked işaretli öğeyi bulmak için özellik:

Array.from(form.elements.characters).find(radio => radio.checked);

1

Saf bir javascript kullanarak, olayı gönderen nesneye yapılan başvuruyu işleyebilirsiniz.

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

1

her biri ayrı öznitelik adlarına ('seçenek1', 'seçenek2' vb.) ancak aynı sınıf adına sahip farklı radyo düğmesi satırlarını bir forma yerleştirmeniz gerektiğini varsayalım. Belki de her biri bir soruyla ilgili 1 ila 5 ölçeğine dayanan bir değer gönderecekleri birden çok satıra ihtiyacınız vardır. javascript'inizi şöyle yazabilirsiniz:

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

Son çıktıyı, formla birlikte gönderilecek gizli bir form öğesine de eklerdim.


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

0

Form öğeniz () için bir Kimlik atamanız mümkünse, bu yol güvenli bir alternatif yol olarak düşünülebilir (özellikle radyo grubu öğesi adı belgede benzersiz olmadığında):

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

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

vb sonra sadece kullanın

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

Veya

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

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.