2013-08-26 150 views
9

当我运行以下自包含代码时,该复选框被选中并取消选中一次,但之后即使这些消息似乎并不意味着切换。为什么jQuery没有检查/取消选中复选框

<html> 
<head> 
<title>dummy</title> 
<script src="http://code.jquery.com/jquery-1.10.2.js"></script> 
</head> 
<body> 
<input id="fc" type="checkbox" /> 
<script> 
function f() { 
    if (typeof $("#fc").attr("checked") !== 'undefined') { 
    alert("checked, unchecking"); 
    $("#fc").removeAttr("checked"); 
    } else { 
    alert("unchecked, checking"); 
    $("#fc").attr("checked", "checked"); 
    } 
    setTimeout(f, 1000); 
} 
setTimeout(f, 1000); 
</script> 
</body> 
</html> 
+1

在Firefox中测试过,它似乎第一次工作,但它只是呈现为未选中状态。 –

+0

正确,在Chrome和Firefox中同样适用于我 – necromancer

回答

20

需要)使用.prop(而不是.attr()来检查并取消复选框

$("#fc").prop("checked", true);// true to check false to uncheck 

而且使用方法:检查过滤器选中一个复选框是否被选中

function f() { 
    if ($("#fc").is(":checked")) { 
     alert("checked, unchecking"); 
     $("#fc").prop("checked", false); 
    } else { 
     alert("unchecked, checking"); 
     $("#fc").prop("checked", true); 
    } 
    setTimeout(f, 1000); 
} 
setTimeout(f, 1000); 

以上给出的样本可简化为

function f() { 
    $("#fc").prop("checked", !$("#fc").is(":checked")); 
} 
setInterval(f, 1000); 

演示:Fiddle

+0

使用'attr'也没有错。 http://jsfiddle.net/YC2TS/ – Vandesh

+0

@Vandesh在这里失败http://jsfiddle.net/arunpjohny/fDZXR/1/ –

+2

@Vandesh:它有很多错误。请参阅'checked' *属性*和'checked' *属性*之间的一大区别是属性获取/设置当前值,并且属性获取/设置初始值(并且不会影响状态之后)。 – cHao

相关问题