2013-08-26 18 views
9

Po uruchomieniu poniższego kodu, pole wyboru zostaje zaznaczone i odznaczone, ale po tym czasie komunikaty nie wydają się sugerować przełączania.Dlaczego jQuery nie zaznacza/odznacza pola wyboru

<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

Testowany w przeglądarce Firefox i wygląda na to, że działa po raz pierwszy, ale jest renderowany jako niezaznaczony. –

+0

poprawne, to samo dla mnie w Chrome i Firefox – necromancer

Odpowiedz

20

potrzeby korzystania .prop() zamiast .attr() aby sprawdzić i usuń zaznaczenie pola wyboru

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

również użyć: sprawdzone filtr, by sprawdzić, czy jest zaznaczone pole wyboru

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

Powyższą próbkę można uprościć jako:

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

Demo: Fiddle

+0

Nie ma nic złego w używaniu 'attr'. http://jsfiddle.net/YC2TS/ – Vandesh

+0

@Vandesh kończy się niepowodzeniem http://jsfiddle.net/arunpjohny/fDZXR/1/ –

+2

@Vandesh: Jest z tym wiele nie w porządku. Zobacz, jedną dużą różnicą między atrybutem 'checked' * a właściwością' checked' * * jest to, że właściwość pobiera/ustawia bieżącą wartość, a atrybut pobiera/ustawia wartość początkową (i nie ma wpływu na stan pudełka po). – cHao

Powiązane problemy