選択したラジオボタンの値を取得する方法


316

ラジオボタンのグループから選択した値を取得したい。

これが私の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>

これが私の.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;

私は未定義になっていきます。


50
これを使用することができ、あなたはここではjQueryを使用していないが、あなたは今までにしたい場合:$("input[type='radio'][name='rate']:checked").val();
GJK

なぜそのオブジェクトを検査できないのですか?とにかく使用する必要があります.checked
Amol M Kulkarni 2013


それが必要かどうかはわかりませんが、ラジオボタンを<form></form>コンテナに配置するのは良い習慣です。
カミル

回答:


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

レート要素はdivなので、値はありません。これはおそらくundefinedから来て。

checkedプロパティは、要素が選択されているかどうかを教えてくれます。

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

229
jqueryでは次のようになります$("input[name=rate]:checked").val()
Kamran Ahmed

1
わかりません。同じIDの2つの要素がありますか?
mzalazar 2014年

3
@mzalazarいいえ、すべてのラジオボタンには独自のIDがありますが、すべて同じ名前になっているため、1つのグループに入れられるので、一方を選択すると、もう一方が選択解除されます。カムランアーメドの回答を使用すると、グループ内のどのラジオボタンが選択されているかを確認し、選択された(チェックされている)ラジオボタンの値のみを取得できます。
Broco

4
mahdavipanahのすぐ上の(を使用した[checked])コードは、属性(つまり、初期状態)を探します。代わり:checkedに、プロパティ(つまり、現在の状態)を検索するを使用する必要があります。
Gras Double、

5
Javascriptでは次のようになりますdocument.querySelectorAll("input[name=rate]:checked")[0].value
Vincent McNabb

519

これは、IE9以降および他のすべてのブラウザーで機能します。

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

13
もちろん、querySelectorがnullを返すかどうかを確認する必要があります。これは、ラジオボタンがオンになっていない場合に当てはまります。
ロバート

18
@KamranAhmed:jQueryソリューションには、はるかに大きなコストが伴います。

5
ParthikGosar:IE8は:checkedセレクターをサポートしていません。

14
引用符rateは不要であることに注意してください。
mbomb007 2015

1
上記のプロファイルを作成したり、呼び出しの背後にある実装を検査したりできるまで、@ KamranAhmedは、ネイティブコードを呼び出す他のonelinerについて言うことができる以上、上記のパフォーマンスについて言うことはできません。ブラウザーが:checked要素を特定する方法を推測するのに十分な情報がありません。おそらく「ハッシュ化されてキャッシュされた」すべてがあり、それはO(1)操作です。ページ上の要素の数に応じてクエリ時間が増加するなどのことを示すようにプロファイルを作成していない場合、またはその背後にあるブラウザーのソースコードを理解していない場合は、わかりません。
午前

144

checkedプロパティを使用して値を取得できます。

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
チェックできるのは1つの無線だけなので、通常はブロック内のbreakor returnステートメントifがループの追加のパスを停止することを期待します。マイナーなポイントですが、良いスタイルです。
RobP

1
これは、この質問に対する最もクリーンなバニラ実装です。賞賛!
SeaWarrior404 2019年

37

端に住んでいるあなたのために:

これでRadioNodeListと呼ばれるものがあり、そのvalueプロパティにアクセスすると、現在チェックされている入力の値が返されます。これにより、投稿された回答の多くに見られるように、最初に「チェック済み」入力をフィルタリングする必要がなくなります。

フォームの例

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

チェックされた値を取得するには、次のようにします。

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

それを証明するJSFiddle:http ://jsfiddle.net/vjop5xtq/

これはFirefox 33で実装されたことに注意してください(他のすべての主要なブラウザはそれをサポートしているようです)。古いブラウザではRadioNodeList、これが適切に機能するためにpolfyillが必要になります


1
form.elements["test"].valueChrome [バージョン49.0.2623.87 m]で非常にうまく機能します。
エヴァンHu

フォームである必要があります。たとえば、divは使用できません。それ以外の場合、これはFF 71.0で機能します。
Andrew

16

私のために働いたものは、api.jquery.comから以下に与えられています。

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には、選択したラジオボタン(つまり)o1またはo2の値が含まれます。


11

別の(明らかに古い)オプションは、「document.nameOfTheForm.nameOfTheInput.value;」の形式を使用することです。例: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>

フォーム内で要素をその名前で参照できます。ただし、元のHTMLにはフォーム要素が含まれていません。

ここでフィドル(ChromeおよびFirefoxで動作):https : //jsfiddle.net/Josh_Shields/23kg3tf4/1/


1
これははるかに古いレガシーDOM形式であり、特定の要素に限定されており、現在の標準に対応していないため、実際にはもう使用しないでください。
j08691 2015

@ j08691教えてくれてありがとう。これは大学の授業で学んだことの一つです。そこから何も信用せず、代わりにオンライン参照を使用する方が良いでしょう。
JHS、2015

6
「...現在の基準に追いついていない」説得力のある議論ではありません。詳しく説明してください。うまくいけばうまくいきます。また、選択されたオプションが「固定レート」であるかどうかのみを決定する、受け入れられた回答よりも少ない行です。
zeros-and-ones

上記のフィドルはSafariブラウザ(7.1.4)では動作しないようです。値は未定義として表示され、ラジオボタンの状態を変更しても影響はありません。
スチュアートR. Jefferys

はい、これはEdgeブラウザ(40.15063.0.0)でも機能しません。この方法が廃止された場合、ラジオボタンはその性質によってグループ化されるため、この方法はよりシンプルで理にかなっているため、奇妙に見えます。他のほとんどの回答は、チェックボックスをオンにしているように見えます。
mikato

10

使用document.querySelector( '入力[タイプ=ラジオ]:チェック')値;。 選択したチェックボックスの値を取得するには、他の属性を使用して、名前=性別 などの値を取得できます。 以下のスニペットを確認してください。

解決

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>

ありがとうございました


7

HTMLコード:

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

JQUERY CODE:

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

あなたが得るでしょう

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

5

JavaScript getElementById()では、上記のコードのIDの「」を使用して値を取得できます。このコードには、IDではなく名前が含まれているため、次のように変更します。

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

コードに従ってこのrate_valueを使用します


5

質問してから1年ほど経ちますが、かなりの改善が可能だと思いました。ボタンがチェックされているかどうかをチェックし、チェックされている場合はその値が何であるかを確認するため、これが最も簡単で最も用途の広いスクリプトであることがわかります。

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

次のように、別の関数内で関数を呼び出すこともできます。

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

5

フォーム要素がmyForm以下の変数によって参照され、ラジオボタンが「my-radio-button-group-name」という名前を共有していると仮定すると、以下は純粋なJavaScriptであり、標準に準拠しています(ただし、どこでも利用できることを確認していません) ):

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

上記は、チェックされた(または選択された場合、選択された)ラジオボタン要素があれば、その値をnull返します。ソリューションの要点は、namedItem特にラジオボタンで機能する機能です。

通常はオブジェクトを返すため、HTMLFormElement.elementsHTMLFormControlsCollection.namedItem、特にRadioNodeList.valueを参照してください。namedItem RadioNodeList

MDNを使用しているのは、MDNを使用すると、標準への準拠を少なくとも大幅に追跡できること、および多くのWhatWGおよびW3Cの出版物よりも理解しやすいためです。


答えを書いたとき、私は既存の答えをざっと読み、共有したいものに似ているものは何も見当たりませんでした。今、私は少なくとも2つの同様の解決策を見逃したことがわかります。とはいえ、私が採用する特定の構文を使用してコードの提案を書いた人は誰もいませんが、一般的な考え方は同じです。ご参考までに。ポイントは、または(多分、投機)のRadioNodeListようなものを通じて、または私の上記の構文を通じてへの参照を取得することです。form.elements[name]form[name]
amn

3

ラジオボタンを直接何度も呼び出すと、[チェック済み]ボタンではなく、[最初]ボタンの値が得られます。どれがチェックされているかを確認するためにラジオボタンをループする代わりに、onclick後で自由に取得できる変数を設定するJavaScript関数を呼び出すことを好みます。

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

どの呼び出し:

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

追加の利点は、データを処理したり、ボタンのチェックに反応したりできることです(この場合、SUBMITボタンを有効にします)。


5
onchangeユーザーがキーボードを使用する場合は、代わりにイベントをバインドする必要があります。
John Dvorak

2

以前に提案された機能の改善:

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

純粋なJavaScriptでのこの問題に対する私の見解は、チェックされたノードを見つけ、その値を見つけて配列からポップすることです。

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

矢印関数を使用していることに注意してください。実際の例については、このフィドルを参照してください。


tagName === 'INPUT'チェックを追加して、以外のタグで作業していないことを確認しますinput
Aternus


1

を使用.find()して、チェックされた要素を選択できます。

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

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

1
Array.findを知りませんでした。しかし、これは要素がチェックされないと壊れます。
ポンギ2017年

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>

その後...

var rate_value = rates.rate.value;

これが質問にどのように答えるかを説明できますか?
soundlikeodd 2017年

" ラジオボタンのグループから選択した値を取得します ":rates.rate.valuenotrates.value
user7420100

これが正解です。document.getElementById("rates").rate.value[または]document.forms[0].rate.value
Atika


0

jQuery.click関数を使用して、目的の出力を取得しました。

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

それが役に立てば幸い。


0

ボタンが
var myform = new FormData(getformbywhatever); myform.get("rate");
QuerySelector の形式である場合は、上記の方が適切なソリューションです。ただし、この方法は、CSSについての手掛かりがない場合は特に、簡単に理解できます。さらに、入力フィールドはとにかくフォームになっている可能性が非常に高いです。
チェックしませんでした。他の同様の解決策があります。繰り返して申し訳ありません


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

そのようなラジオボタンの値を取得できません

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

HTMLタグの値を取得するには、document.getElementById( 'r1')。innerHtmlを使用します
James Cluade

0

を使用している場合はJQuery、ラジオボタンのグループに次のスニペットを使用してください。

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

0

単に使用してください: document.querySelector('input[rate][checked]').value


うまくいきませんでした。上記のPawanの同様の構文を参照してください。のように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

要素にforEachループを使用してボタンをループすることもできます

    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では非常に簡単な
htmlページです

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

フォームからphpに値を取得

$radio=$_POST['radio'];<br/>
use php if(isset($_POST['submit']))<br/>
{<br/>
echo "you selected".$radio."thank u";<br/>
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.