使用jQuery常规选择器取消选中单选按钮

时间:2011-05-25 08:23:06

标签: jquery html radio-button

我有以下表格(它是动态生成的,我有几个副本,名为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它工作正常, 所以我可以在循环中使用它,但我试着在这里避免循环。还有更好的方法吗?

我的目标是取消选中功能,所以第二次单击单选按钮本身将取消选中它

3 个答案:

答案 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()检索属性的当前动态设置值。

您可以看到jsFiddle example here

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