#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")
у вас не возникнет проблем
Например, рассмотрим элемент 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 … спасибо, Патрик 🙂