Статьи

Выпущена jQuery 1.6.1: исправлена ​​обратная совместимость .attr ()

Версия 1.6 jQuery была выпущена две недели назад . Одним из основных изменений была отдельная обработка атрибутов и свойств DOM. По сути, рассмотрим:


<input id="i" type="checkbox" checked />

В более ранних версиях jQuery $("#i").attr("checked") Однако в v1.6 этот же код вернул бы пустую строку («»), поскольку это было фактическим значением атрибута HTML «check» при загрузке страницы. Значение свойства DOM будет получено с использованием $("#i").prop("checked")

К сожалению, это изменение вызвало небольшую путаницу в сообществе и могло нарушить работу сценариев. Основная проблема заключается в том, что пустая строка ложна, поэтому, хотя это правильное значение , она вводит недостатки логической логики, которые могут быть неудобны при отладке:

 
if ($("#i").attr("checked")) {
	// this code runs in previous versions of jQuery
}
else {
	// this code runs in jQuery 1.6
}

Команда jQuery старается поддерживать совместимость со старыми версиями. По этой причине метод v1.6.1 .attr()

Документация также была разъяснена в отношении булевых атрибутов HTML, таких как «флажок»:

  • Метод .prop () должен использоваться для логических атрибутов / свойств и для свойств, которые не существуют в HTML.
  • Булевы атрибуты, которые можно увидеть в HTML, должны продолжать обрабатываться методом .attr ().

Булевы атрибуты HTML: автофокус, автозапуск, асинхронность, проверено, элементы управления, отложено, отключено, скрыто, зацикливание, многократное, открытое, только для чтения, требуется, ограничено и выбрано.

Замечательно, что команда jQuery прислушивается к своим пользователям и готова отменить логическое решение по разработке ради стабильности и обратной совместимости. Возможно, другие проектные команды могли бы поучиться на своем примере?

jQuery 1.6.1 также исправляет около 20 мелких ошибок и может быть загружен с:

http://code.jquery.com/jquery-1.6.1.js
http://code.jquery.com/jquery-1.6.1.min.js

Повлиял ли на ваш код изменение jQuery v1.6 .attr ()?