2013-08-26 119 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

相關問題