jQuery 1.6 не добавляет класс к элементу при изменении флажка

#jquery

#jquery

Вопрос:

Этот код отлично работает с jQuery 1.5.1, но когда я использую jQuery 1.6.0, он изменяет значение флажка после щелчка, но не добавляет класс ‘done’ к элементу.

 $("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) {});
});
  

Ответ №1:

до версии 1.6

$(this).attr("checked") непоследовательно, поскольку это может быть логическое значение или строка

jQuery говорит что-то вроде: атрибут — это то, что находится внутри свойства. итак, он перестал отправлять вам bool значение и вместо этого отправляет вам string значение.

если вы измените все

 $(this).attr("checked")
  

Для

 $(this).prop("checked")
  

у вас не возникнет проблем


из документации jQuery

Например, рассмотрим элемент DOM, определенный HTML-разметкой <input type="checkbox" checked="checked" /> , и предположим, что он находится в переменной JavaScript с именем elem:

 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)
  

Ответ №2:

Или обновите до версии 1.6.1. Функция attr () будет вести себя так же, как в версии 1.5, поэтому вам не нужно просматривать свой код, чтобы найти каждый вызов attr () и решить, нужно ли вам изменить его на prop () .

Комментарии:

1. Нет, я обновился до версии 1.6.1, для меня это проще, но, я думаю, ничего не произойдет.проблема для 1.6 … спасибо, Патрик 🙂