使用jQuery一般选择取消选中单选按钮

问题描述:

我有以下的形式(它是动态生成的,我有一个名为形式-0的它几份形式-3)使用jQuery一般选择取消选中单选按钮

<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,他们用于其他目的)

Itry创建取消选中功能,因此,将页面上的所有无线电按钮的工作, 所以我打了控制台,并试图取消他们使用这样的:

$('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它工作正常, 所以我可以在一个循环内使用它,但我尝试在这里避免循环。有没有更好的办法?

我的目标是有一个取消选中的功能,所以单选按钮的第二点击本身将取消其

如果您使用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'); 

但是,不建议使用removeProp变种,根据documentation

请勿使用此方法删除本机属性,如选中,禁用选中。这将完全删除该属性,一旦删除,不能再添加到元素。使用.prop()将这些属性设置为false。

(指出这多亏@ noah1989)

attr()检索已经在源代码中设定的值,和prop()检索属性的当前,动态设置值。

你可以看到一个jsFiddle example here

+3

它不是'could'但'should':'在jQuery 1.6中,.prop()方法提供一个显式检索属性值的方法,而.attr()只检索属性。' – balexandre 2011-05-25 08:34:46

+0

@Sylvain Thrd我试着颠倒你的例子,所以它会工作时单击单选按钮本身不必检查:'$('form [id^= “形式 - ”]')。find(“input:radio:checked”)。click(function(){(this).prop('checked',false); }); '它似乎并不奏效,你知道为什么吗? – ilyo 2011-05-25 08:40:48

+1

@IlyaD因为你在'input:radio:checked'上绑定'click()'事件,当你这样做时,没有单选按钮被选中。您可以使用[live()](http://api.jquery.com/live/),只要单选按钮被选中,它就会被绑定到这个'click'事件:'$('form live(“click”,function(){ $(this).prop('checked',false); }(“input:radio:checked” );' – Sylvain 2011-05-25 08:44:30

你应该能够使用

$('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); 
    } 
); 
+0

+1在这里。如果你用.prop替换.attr,我发现这对我有用。 – 2014-05-16 13:10:11

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