此代码适用于jQuery 1.5.1,但是当我使用jQuery 1.6.0时,它会在单击后更改复选框的值,但不会将该类添加到元素中。
$("input:checkbox").live('change', function(eve) {
eve.preventDefault();
var el = this.id ;
var done = this.done ;
if( $(this).attr("checked") == true ) {
$('#item-'+el).find(".text").addClass('done');
//return false;
}
if( $(this).attr("checked") == false ) {
$('#item-'+el).find(".text").removeClass('done');
//return false;
}
$.post('taskDone.php', {
id: this.id,
value: $(this).attr("checked") ? 1 : 0
}, function(data) {});
});
答案 0 :(得分:3)
之前的1.6
$(this).attr("checked")
不一致,因为它可以是布尔,也可以是字符串
jQuery说的是:属性是属性中的内容。所以,它停止向您发送bool
值,而是向您发送string
值。
如果你改变所有
$(this).attr("checked")
到
$(this).prop("checked")
你没有问题
例如,考虑由HTML标记
<input type="checkbox" checked="checked" />
定义的DOM元素,并假设它位于名为elem的JavaScript变量中:
elem.checked true (Boolean)
$(elem).prop("checked") true (Boolean)
elem.getAttribute("checked") "checked" (String)
$(elem).attr("checked")(1.6+) "checked" (String)
$(elem).attr("checked")(pre-1.6) true (Boolean)
答案 1 :(得分:1)
或更新至1.6.1版。 attr()函数的行为与1.5相同,因此您不必遍历代码来查找对attr()的每次调用,并决定是否需要将其更改为prop()。