判断所有单选按钮组是不是有一个复选框
Posted
技术标签:
【中文标题】判断所有单选按钮组是不是有一个复选框【英文标题】:Determine whether all radio button groups have one checked box判断所有单选按钮组是否有一个复选框 【发布时间】:2013-02-03 12:59:42 【问题描述】:我正在做一个测验,每个问题都有一组单选按钮,如下所示:
<input type="radio" name="quid16" value="answid53" />Answer 1 : foo
<input type="radio" name="quid16" value="answid54" />Answer 2 : bar
<input type="radio" name="quid16" value="answid55" />Answer 3 : joe
<input type="radio" name="quid16" value="answid56" />Answer 4 : blogs
每个组都有一个id,比如上面的quid16
;这个id是php生成的,不是固定的。
当我验证表单提交时,我需要检查所有组是否都有一个选中的单选按钮。
问题是我事先不知道组 ID。我该如何解决这个问题?
【问题讨论】:
你是在使用 jQuery Validate 插件还是从头开始做这个? 找到所有的单选按钮。遍历它们,使用单选按钮名称在最初为空的对象中创建一个属性。如果该按钮被选中,则将该属性的值设置为true
,否则将其保留为空。完成后,对象中具有null
值的属性是未选中的单选按钮。
【参考方案1】:
你可以拿走所有单选框,以“quid”开头,然后:
-
过滤唯一名称
过滤检查的值
比较 1. 与 2.
代码:
var radios = $('[name^=quid]'),
names = $.unique(radios.map(function()
return this.name;
)),
checked = radios.filter(function()
return this.checked;
);
if (names.length == checked.length)
alert('all answers are checked');
【讨论】:
@Pointy 实际上还有一些我以前没见过的 jQuery'ish :) 谢谢杰克。我不知道名称选择器的存在。你的解决方案帮了我很大的忙。 @Amelia 不客气。如果我的回答足够,请考虑通过单击此答案旁边的复选框来接受此答案。 杰克。是的,我想接受这个答案。您提到的复选框似乎不存在。也许是因为这个问题已经结束了? @Amelia,这个答案附近的数字 3 下方应该有一个复选标记。查看this about page了解更多详情。【参考方案2】:使用Attribute Starts With Selector 获取前缀为“quid”的元素,使用jQuery.is 选择:checked
的元素。例如:
$('[name^=quid]').is(':checked'); //Returns true if any radio buttons are 'checked'
这是一个 JSFiddle 示例:http://jsfiddle.net/SDXSf/
<input type="radio" name="quid16" value="answid53" />Answer 1 : foo <br/>
<input type="radio" name="quid16" value="answid54" />Answer 2 : bar <br/>
<input type="radio" name="quid16" value="answid55" />Answer 3 : joe <br/>
<input type="radio" name="quid16" value="answid56" />Answer 4 : blogs <br/>
<br/>
<button>Test</button>
<script type="javascript">
$(function()
function isOneChecked(selector)
return $(selector).is(':checked')
$('button').click(function()
alert(isOneChecked('[name^=quid]') ? 'Validated' : 'Please select a radio button');
);
);
</script>
【讨论】:
等一下...您想按quid
后面的数字分组吗?那么这是否意味着无线电组 #1 将是 quid01,无线电组 #2 将是 quid02,等等?
是的,这将是分组。然而 group#1 不一定必须是 quid01,它也可以是 quid15 quid169 等等。
我会接受 Jack 的回答。【参考方案3】:
if ($('input:radio').is(':checked')) function() else function()
【讨论】:
我认为这并不是问题的核心。 “但是由于这些测验可能从一页到下一页有所不同......”我认为页面上不能有超过 1 组收音机。以上是关于判断所有单选按钮组是不是有一个复选框的主要内容,如果未能解决你的问题,请参考以下文章