回答:
このような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ますが、要求文字列の値をチェックします。
jQueryの、それはのようなものになるだろう
if ($('input[name=gender]:checked').length > 0) {
// do something here
}
それを細かく分割して、より明確に説明します。jQueryは物事を左から右に処理します。
input[name=gender]:checked
input 入力タグに制限します。[name=gender] 前のグループ内の性別という名前のタグに制限します。:checked 前のグループ内で選択されているチェックボックス/ラジオボタンに制限します。これを完全に回避したい場合checked="checked"は、HTMLコードでラジオボタンの1つをチェック済み()としてマークします。これにより、1つのラジオボタンが常に選択されることが保証されます。
バニラ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;
}
}
nameです。
単純なJavaScriptでCSSセレクターシュガーを投入して、Russ Camのソリューションを改善しようとしています。
var radios = document.querySelectorAll('input[type="radio"]:checked');
var value = radios.length>0? radios[0].value: null;
ここではjQueryは実際には必要ありません。querySelectorAllは十分に広くサポートされています。
編集: cssセレクターのバグを修正しました。引用符を含めましたが、省略することもできますが、省略できない場合があるので、そのままにしておくことをお勧めします。
a[href^="http://"])の場合は必須であり、一貫性がより維持できるため、常に属性値を引用符で囲みます。さらに、これにより、属性宣言が対応するHTMLと一致します。
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");
}
この簡単なスクリプトを使用できます。同じ名前と異なる値を持つ複数のラジオボタンがある場合があります。
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.
}
document.forms[0].elements['nameOfRadioList'].value
このページのスクリプトは、以下のスクリプトを作成するのに役立ちました。これは、より完全で普遍的なスクリプトだと思います。基本的に、フォーム内の任意の数のラジオボタンを検証します。つまり、フォーム内の異なるラジオグループのそれぞれに対してラジオオプションが選択されていることを確認します。たとえば、以下のテストフォームで:
<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>
ラジオ入力値を取得するときに、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()ため、ラジオ入力のチェックされた値を期待どおりに返しません-最初のラジオボタンの値を返します。
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)
これは私がこの問題を解決するために作成したユーティリティ関数です
//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;
}
}
}
これは、同じ名前を共有するラジオボタンに有効です。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 });
if(document.querySelectorAll('input[type="radio"][name="name_of_radio"]:checked').length < 1)
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>
ラジオボタンのいずれかが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、それらのどちらもチェックされます。
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 "";
}
JQueryで、ラジオボタンの現在のステータスを確認する別の方法は、属性を「チェック済み」にすることです。
例えば:
<input type="radio" name="gender_male" value="Male" />
<input type="radio" name="gender_female" value="Female" />
この場合、次を使用してボタンを確認できます。
if ($("#gender_male").attr("checked") == true) {
...
}
$("#gender_male").attr("checked")は文字列"checked"であり、ブール値で はありません。
このコードは、フォームが送信されると、選択されたラジオボタンに警告します。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>
以下は、送信を続行せず、ラジオボタンがチェックされていない場合にアラートを送信するように拡張されたソリューションです。もちろんこれは、最初にチェックを外す必要があることを意味します!
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(); }。
例:
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;
}
フォーム
<form name="teenageMutant">
<input type="radio" name="ninjaTurtles"/>
</form>
スクリプト
if(!document.teenageMutant.ninjaTurtles.checked){
alert('get down');
}
フィドル:http : //jsfiddle.net/PNpUS/
(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;
}
バニラ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をポリフィルする方法?
これも機能し、要素IDの呼び出しを回避しますが、配列要素として使用して呼び出します。
次のコードは、radiobuttonsグループと呼ばれる配列が、htmlドキュメントで宣言されているのと同じ順序でradiobuttons要素によって構成されるという事実に基づいています。
if(!document.yourformname.yourradioname[0].checked
&& !document.yourformname.yourradioname[1].checked){
alert('is this working for all?');
return false;
}
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;
}
ラジオボタンには同じ名前で異なる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;
}
}