Answers:
假设您有这样的HTML
<input type="radio" name="gender" id="gender_Male" value="Male" />
<input type="radio" name="gender" id="gender_Female" value="Female" />
对于客户端验证,以下是一些Java脚本,用于检查选择了哪一个:
if(document.getElementById('gender_Male').checked) {
//Male radio button is checked
}else if(document.getElementById('gender_Female').checked) {
//Female radio button is checked
}
根据标记的确切性质,可以使上述操作更为有效,但这足以使您入门。
如果您只是想查看页面上的任何位置是否选中了任何单选按钮,则PrototypeJS使其非常容易。
如果在页面的某处选择了至少一个单选按钮,则此函数将返回true。同样,这可能需要根据您的特定HTML进行调整。
function atLeastOneRadio() {
return ($('input[type=radio]:checked').size() > 0);
}
对于服务器端验证(请记住,您不能完全依靠Java进行验证!),这取决于您选择的语言,但是您只需要检查gender
请求字符串的值即可。
使用jQuery,就像
if ($('input[name=gender]:checked').length > 0) {
// do something here
}
让我将其分解为更清晰的内容。jQuery从左到右处理事情。
input[name=gender]:checked
input
将其限制为输入标签。[name=gender]
将其限制为前一组内名称为性别的标签。:checked
将其限制为在上一组中选择的复选框/单选按钮。如果要完全避免这种情况,请checked="checked"
在HTML代码中将其中一个单选按钮标记为选中(),这样可以确保始终选择一个单选按钮。
普通的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.
}
此页面中的脚本帮助我提出了以下脚本,我认为它更完整,更通用。基本上,它将验证表单中任意数量的单选按钮,这意味着它将确保为表单中每个不同的单选按钮组选择一个单选选项。例如在下面的测试表中:
<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”之前均已给出答案。您可以在表单中拥有尽可能多的单选组,它将忽略任何其他表单元素。所有丢失的单选答案将显示在单个警报弹出窗口内。希望它能对人们有所帮助。任何错误修复或有用的修改,欢迎:)
<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>
和Java代码检查单选按钮是否被选中
<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和方法检查了任何单选按钮 .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,检查单选按钮当前状态的另一种方法是获取属性“ checked”。
例如:
<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');
}
我只想确保选择某些东西(使用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以来,还有前瞻性的polyfill方法接口应该可以轻松使用value
表单子单选元素列表中的一个属性(在上述代码中以形式找到formElement[radioName]
),但这有其自身的问题:如何polyfill RadioNodeList ?
这也是可行的,避免调用元素id,而是将其用作数组元素。
以下代码基于以下事实:一个名为radiobuttons组的数组由radiobuttons元素组成,其排列顺序与html文档中声明的顺序相同:
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;
}
}