使用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
你应该能够使用
$('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);
}
);
+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;
}
它不是'could'但'should':'在jQuery 1.6中,.prop()方法提供一个显式检索属性值的方法,而.attr()只检索属性。' – balexandre 2011-05-25 08:34:46
@Sylvain Thrd我试着颠倒你的例子,所以它会工作时单击单选按钮本身不必检查:'$('form [id^= “形式 - ”]')。find(“input:radio:checked”)。click(function(){(this).prop('checked',false); }); '它似乎并不奏效,你知道为什么吗? – ilyo 2011-05-25 08:40:48
@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