jQuery 1.6没有在复选框更改时向元素添加类

时间:2011-05-27 06:51:10

标签: jquery

此代码适用于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) {});
});

2 个答案:

答案 0 :(得分:3)

之前的1.6

$(this).attr("checked")不一致,因为它可以是布尔,也可以是字符串

jQuery说的是:属性是属性中的内容。所以,它停止向您发送bool值,而是向您发送string值。

如果你改变所有

$(this).attr("checked")

$(this).prop("checked")

你没有问题


来自jQuery Documentation

  

例如,考虑由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()。