我有以下表格(它是动态生成的,我有几个副本,名为form-0 to form-3)
<form id="form-0" name="0">
<b>what is bla?</b><br>
<div class="ansN" id="ans0"><input type="radio" name="answerN" value="0"> aaa </div>
<div class="ansN" id="ans1"><input type="radio" name="answerN" value="1"> bbb </div>
<div class="ansN" id="ans2"><input type="radio" name="answerN" value="2"> ccc </div>
<div class="ansN" id="ans3"><input type="radio" name="answerN" value="3"> ddd </div>
<input type="submit" value="Submit your answer">
</form>
(忽略div,它们用于其他目的)
尝试创建一个取消选中功能,以便在页面上的所有单选按钮上工作, 所以我玩控制台并尝试使用它取消选择它们:
$('form[id^="form-"]').find("input:radio:checked").attr('checked', false);
$('form[id^="form-"]').find("input:radio:checked").removeAttr("checked");
所以选择器确实找到了所有选中的按钮,但它没有取消选中它们,为什么?
当我使用直接JS调用:document.forms[0].answerN[3].checked = false
它工作正常,
所以我可以在循环中使用它,但我试着在这里避免循环。还有更好的方法吗?
我的目标是取消选中功能,所以第二次单击单选按钮本身将取消选中它
答案 0 :(得分:16)
如果您使用的是jQuery 1.6,则可以使用prop()
代替attr()
:
$('form[id^="form-"]').find("input:radio:checked").prop('checked',false);
// OR (not recommended)
$('form[id^="form-"]').find("input:radio:checked").removeProp('checked');
但是,根据documentation:
,建议不要使用removeProp
变体
请勿使用此方法删除原生属性,例如已选中,已禁用或已选择。这将完全删除属性,一旦删除,就不能再次添加到元素。使用.prop()将这些属性设置为false。
(感谢@ noah1989指出这一点)
attr()
检索源代码中设置的值,prop()
检索属性的当前动态设置值。
答案 1 :(得分:3)
您应该可以取消选中
$('input[name=foo]').attr('checked', false);
我最初的猜测是,您从find
获得了一系列单选按钮。 Thaus你应该使用.each()
来循环它们,并在每个单独的checked
属性设置为false。
像这样的东西(不是testet,所以可能是语法错误)
$('form[id^="form-"]').find("input:radio:checked").each(
function() {
$(this).attr('checked', false);
}
);
答案 2 :(得分:0)
<input type="radio" id="ra1" onclick="change('ra1')" onmousedown="getvalue('ra1')"/>
function getvalue(id){
ischecked = document.getElementById(id).checked;
}
function change(id){
if(ischecked == false)
document.getElementById(id).checked=true;
else
document.getElementById(id).checked=false;
}