JavaScriptでラジオボタンが選択されているかどうかを確認するにはどうすればよいですか?


271

HTMLフォーム内に2つのラジオボタンがあります。いずれかのフィールドがnullの場合、ダイアログボックスが表示されます。ラジオボタンが選択されているかどうかを確認するにはどうすればよいですか?


回答:


330

このようなHTMLがあるとしましょう

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

クライアント側の検証のために、どれが選択されているかを確認するためのJavaScriptを次に示します。

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

マークアップの正確な性質によっては、上記をより効率的にすることができますが、それで十分です。


ラジオボタンがページのどこかで選択されているかどうを確認するだけの場合は、PrototypeJSを使用すると非常に簡単です。

ページ上のどこかで少なくとも1つのラジオボタンが選択されている場合にtrueを返す関数を次に示します。繰り返しになりますが、特定のHTMLによっては、これを調整する必要がある場合があります。

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

サーバー側の検証検証のためにJavaScriptに完全に依存することはできません!)の場合、選択した言語によって異なりgenderますが、要求文字列の値をチェックします。


1
しかし、ラジオボタンが選択されているかどうかに関係なく、何が選択されているかを確認します。
noob

1
私はあなたが言っていることを本当にフォローしていませんか?ラジオボタンが選択されているかどうかに興味がありますか?
マークビエク2009

はい。ラジオボタンを含むすべてのフィールドが入力されていないと、フォームを送信できないためです。
noob

if(document.getElementById( 'gender_Male')。checked || document.getElementById( 'gender_ Female')。checked)alert( 'ラジオボックスの一部がチェックされています');
Havenard、2009

プロトタイプの例を変更して、R。ベムローズから学んだCSSセレクターのレッスンを利用しました。
Mark Biek

111

jQueryの、それはのようなものになるだろう

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

それを細かく分割して、より明確に説明します。jQueryは物事を左から右に処理します。

input[name=gender]:checked
  1. input 入力タグに制限します。
  2. [name=gender] 前のグループ内の性別という名前のタグに制限します。
  3. :checked 前のグループ内で選択されているチェックボックス/ラジオボタンに制限します。

これを完全に回避したい場合checked="checked"は、HTMLコードでラジオボタンの1つをチェック済み()としてマークします。これにより、1つのラジオボタンが常に選択されることが保証されます。


17
求められていないときにライブラリを提案する場合は-1。このようにして、「ライブラリxをインクルードし、x.doWhatYouNeed()を使用する」ですべてに答えることができます。炎は意図されていません、私はこの質問は純粋なjavascriptで答えられるべきだと本当に思っています(そして、最終的にはライブラリを使うといかに簡単かを指摘します)
Riccardo Galli

23
@RiccardoGalli:多くの人が既にjQueryを使用しているため、すでにjQueryを使用している場合、その答えが「jQueryを使用すると、次のようなものになる」から始まるのです。
Powerlord 2012

1
このようなセレクタをチェーンできるかどうか誰でも知っていますか?input [name = gender] [type = radio]またはinput [name = gender、type = radio]追加の検証のためだけですか?
Ty_ 2015年

@ EW-CodeMonkeyあなたが言及した最初の方法はうまくいくはずです。
Powerlord 2015年

81

バニラJavaScriptの方法

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

2
さて、私は今、ほぼ同じ問題を抱えており、あなたのコードは非常に
役に立ちました

2
これにより、最後にチェックしたラジオボタンの値が得られます。複数の無線グループがある場合、これではおそらく正しい値が得られません。
スタイル

@styfleこれは、ページ上のフォームにラジオボタンが2つしかないというOPの質問に対してうまく機能します。3つ以上のラジオボタン、複数のラジオグループなど、異なる問題のシナリオでは、解決策は異なります:)
Russ Cam

2
@RussCamはい、これはラジオボタンが2つしかない小さなページで機能しますが、回答を完全にするためにコメントを追加しました。ラジオボタン要素を取得する最良の方法は、によるものnameです。
スタイル

より良い方法は、特定のクラスでラジオ要素を選択し、ラジオ要素の異なるグループを異なるクラスにグループ化することです。それ以外の場合、このソリューションは、他の入力フォーム要素のない1つのグループの無線要素に対してのみ機能します。
Oliver

15

単純なJavaScriptでCSSセレクターシュガーを投入して、Russ Camのソリューションを改善しようとしています。

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

ここではjQueryは実際には必要ありません。querySelectorAllは十分に広くサポートされています。

編集: cssセレクターのバグを修正しました。引用符を含めましたが、省略することもできますが、省略できない場合があるので、そのままにしておくことをお勧めします。


var radios = document.querySelectorAll( 'input [type = "radio"]:checked');である必要があります。
Ms. Shafiqur Ra​​hman

@ShafiqurRahmanあなたは完全に正しいです、私は私の答えを更新します、私はあなたがラジオの周りの引用符を必要とするとは思わない
Matt McCabe

3
バニラJavaScriptの+1。他の属性値(などa[href^="http://"])の場合は必須であり、一貫性がより維持できるため、常に属性値を引用符で囲みます。さらに、これにより、属性宣言が対応するHTMLと一致します。
Manngo 2016

11

HTMLコード

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

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

2
警告:このコードは、ページがロードされるとすぐにポップアップ警告を返します。
samthebrand 2013

11

この簡単なスクリプトを使用できます。同じ名前と異なる値を持つ複数のラジオボタンがある場合があります。

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

+1。これは、いくつかのケースで必要な、チェックされたラジオ要素を取得するための最短のバニラJSソリューションです。これが一番の答えだと思います。そして、私たちが使用できる価値を得るためだけにdocument.forms[0].elements['nameOfRadioList'].value
バーラタ

9

このページのスクリプトは、以下のスクリプトを作成するのに役立ちました。これは、より完全で普遍的なスクリプトだと思います。基本的に、フォーム内の任意の数のラジオボタンを検証します。つまり、フォーム内の異なるラジオグループのそれぞれに対してラジオオプションが選択されていることを確認します。たとえば、以下のテストフォームで:

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

RadioValidatorスクリプトは、送信する前に、「test1」と「test2」の両方に対して回答が提供されていることを確認します。フォームにはラジオグループをいくつでも含めることができ、他のフォーム要素は無視されます。欠落しているラジオの回答はすべて、1つのアラートポップアップ内に表示されます。ここに行く、それが人々を助けることを望みます。バグ修正や役立つ修正は大歓迎です:)

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

6

ラジオ入力値を取得するときに、jQueryでこの動作に注意してください。

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

});

その$('input[name="myRadio"]').val()ため、ラジオ入力のチェックされた値を期待どおりに返しません-最初のラジオボタンの値を返します。


4

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)

//($$( 'input [name = radiosname]:checked')。length> 0)がまさに私が必要とするものであった場合、ラジオグループの何かが選択されているかどうかを確認します
Steve Johnson

3

これは私がこの問題を解決するために作成したユーティリティ関数です

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

1
これは、その(再)使用可能性とシンプルさのためです。また、戻り値は素敵なswitchステートメントで処理できます。
JGurtz 2014

3

これは、同じ名前を共有するラジオボタンに有効です。JQueryは必要ありません。

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

チェックボックスについて話していて、チェックボックスがチェックされた名前を共有するリストが必要な場合:

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


2

Mark Biekを少し修正しただけです。

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>

ラジオボタンが選択されているかどうかを確認するJavascriptコード

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

1
getElementsByName()はHTMLCollectionを返します。これには、checkedプロパティがないため、投稿したJavaScriptスニペットが意図したとおりに機能するとは思いません。他の人が示唆しているように、HTMLCollectionの要素をループして、それらの要素がチェックされているかどうかを確認する必要があります。
ルディ

ありがとう。あなたは正しいです。:)これ以上の人々が間違った情報を受け取ることがないように、私の返信を更新しました。
Parag

2

ラジオボタンのいずれかがECMA6およびmethodでチェックされているかどうかを検証できる非常に洗練された方法があります.some()

HTML:

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

そしてjavascript:

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

let radioButtonsArray = Array.from(htmlNodes);

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

isAnyRadioButtonCheckedなりますtrueラジオボタンのいくつかがチェックされた場合やfalse、それらのどちらもチェックされます。


2

ラジオボタンですべてのチェックされた要素を返す

  Array.from(document.getElementsByClassName("className")).filter(x=>x['checked']);

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

1

JQueryで、ラジオボタンの現在のステータスを確認する別の方法は、属性を「チェック済み」にすることです。

例えば:

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

この場合、次を使用してボタンを確認できます。

if ($("#gender_male").attr("checked") == true) {
...
}

1
私の場合、の値$("#gender_male").attr("checked")は文字列"checked"であり、ブール値で はありません。
Koks_rs 2016

1

このコードは、フォームが送信されると、選択されたラジオボタンに警告します。jQueryを使用して、選択した値を取得しました。

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


1

スプレッド演算子いくつかを使用して、配列内の少なくとも1つの要素がテストに合格することを確認しました。

私は誰の懸念を共有しています。

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


0

以下は、送信を続行せず、ラジオボタンがチェックされていない場合にアラートを送信するように拡張されたソリューションです。もちろんこれは、最初にチェックを外す必要があることを意味します!

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

各ラジオボタンのフォームにID( 'radio1'、 'radio2'、または呼び出した名前)を設定することを忘れないでください。そうしないと、スクリプトが機能しません。


あなたは単に行うことができます:if (!document.getElementById('radio1').checked && !document.getElementById('radio2').checked) { alert(); }
insertusernamehere 2013年

0

例:

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


0

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

0

バニラJavaScriptが必要で、各ラジオボタンにIDを追加してマークアップを乱雑にしたくない場合は、最新のブラウザーのみに注意してください。次の機能的アプローチは、forループよりも少し趣があります。

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

どちらもチェックされていない場合は返されますundefined(上の行を変更して別のものを返すこともfalseできますが、たとえば、返されるようにするには、上の関連行をに変更できます}).pop() || {value:false}).value;)。

RadioNodeListインターフェースvalueはフォームの子ラジオ要素のリストのプロパティを簡単に使用できるため、前向きのポリフィルアプローチもあります(上記のコードのにありますformElement[radioName])が、それ自体に問題があります:RadioNodeListをポリフィルする方法?


0

これも機能し、要素IDの呼び出しを回避しますが、配列要素として使用して呼び出します。

次のコードは、radiobuttonsグループと呼ばれる配列が、htmlドキュメントで宣言されているのと同じ順序でradiobuttons要素によって構成されるという事実に基づいています。

if(!document.yourformname.yourradioname[0].checked 
   && !document.yourformname.yourradioname[1].checked){
    alert('is this working for all?');
    return false;
}

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>

JAVAScript:

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

-3

ラジオボタンには同じ名前で異なるIDを付けます。

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;
   }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.