Pull to refresh

Вышел jQuery 1.6.1 RC

Reading time5 min
Views4.5K
Original author: http://blog.jquery.com/
Мы подошли к первому обновлению jQuery 1.6 и рады сообщить о выходе первого релиз-кандидата! Данный код, скорее всего, пойдёт в итоговую версию 1.6.1 (она выйдет ближе к концу недели) — всё, кроме (возможных) критических багов, конечно же.

Скачать код можно из jQuery CDN:
http://code.jquery.com/jquery-1.6.1rc1.js

Можете поспособствовать нам, поместив этот код в ваше рабочее приложение и дав знать, если что-то перестанет работать. В этом случае, пожалуйста, убедитесь, что вы тестируете конкретно jQuery 1.6.1 RC 1 и заведите баг.

Мы собираемся поощрять любые инициативы участников сообщества по внесению полезных изменений в ядро jQuery. Мы подготовили целую страницу с подробной информацией, призванную упростить этот процесс. Наша команда здесь и готова помочь вам помочь нам!

Обновление с 1.5.2 до 1.6.1


Появление нового метода .prop(), а также изменения в работе метода .attr() — породили целую дискуссию о различиях между атрибутами и свойствами и их взаимосвязи. Кроме того, возникли некоторые проблемы с обратной совместимостью, которые были исправлены в 1.6.1. Другими словами, при обновлении с 1.5.2 до 1.6.1, вам не нужно менять какой-либо старый код.

Ниже вы найдёте описание изменений в модуле «Атрибуты» в jQuery 1.6 и 1.6.1, а также рекомендации по предпочтительному использованию методов .attr() и .prop(). Однако, повторимся, jQuery 1.6.1 позволяет вам обращаться к методу .attr() точно так, как вы уже привыкли.

Список изменений

Недавние изменения в модуле «Атрибуты» устранили разночтения и двусмысленность в поведении атрибутов и свойств, но в тоже время вызвали смятение в рядах jQuery-сообщества, т.к. во всех версиях jQuery вплоть до 1.6 для работы и с атрибутами, и со свойствами использовался один единственный метод (.attr()). Прежний метод .attr() содержал множество багов и был непрост в поддержке.

В jQuery 1.6.1 были исправлены несколько багов, а также (снова) обновился модуль «Атрибуты».

Итак, булевые атрибуты (такие как checked, selected, readonly и disabled) в 1.6.1 ведут себя точно также как и в прежних версиях jQuery — вплоть до 1.6. Таким образом, код типа такого:

$(“:checkbox”).attr(“checked”, true);
$(“option”).attr(“selected”, true);
$(“input”).attr(“readonly”, true);
$(“input”).attr(“disabled”, true);


* This source code was highlighted with Source Code Highlighter.

или даже такой:

if ( $(“:checkbox”).attr(“checked”) ) { /* Do something */ }

* This source code was highlighted with Source Code Highlighter.

— можно не менять при переходе на 1.6.1 и оставить как есть (ничего не сломается).

Прояснить суть изменений, сделанных в jQuery 1.6 в отношении метода .attr() нам помогут несколько примеров, работавших в предыдущих версиях jQuery, которые теперь (при использовании 1.6) должны были быть переписаны:

.attr() Proper .prop() usage
$(window).attr… $(window).prop…
$(document).attr… $(document).prop…
$(“:checkbox”).attr(“checked”, true); $(“:checkbox”).prop(“checked”, true);
$(“option”).attr(“selected”, true); $(“option”).prop(“selected”, true);

Во-первых, вызов метода .attr() у window или document не сработает в jQuery 1.6, т.к. window и document не имеют атрибутов. Они содержат только свойства (например, location или readyState), манипулировать которыми следует при помощи метода .prop(), либо чистого яваскрипта. В jQuery 1.6.1 метод .attr(), вызванный у window или document вместо того, чтобы выдать ошибку — просто приведёт к вызову метода .prop().

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

<input type=”checkboxchecked=”checked>

* This source code was highlighted with Source Code Highlighter.

Булевые атрибуты (например, checked) задают только значение по умолчанию (во время инициализации страницы). В случае чекбокса, атрибут checked определяет будет ли в нём стоять галочка при загрузке страницы.

Свойства, в свою очередь, это то, с помощью чего браузер отражает изменения в текущих значениях. Обычно значения свойств отражают значения соответствующих атрибутов (если таковые существуют). Однако, в случае булевых атрибутов — всё иначе. Булевые свойства остаются в актуальном состоянии (с актуальными значениями), если пользователь убрал галочку с чекбокса или выбрал пункт из выпадающего списка. Соответствующий атрибут — нет (как было уже отмечено выше, они используются только для хранения значения по умолчанию).

$(“:checkbox”).get(0).checked = true;
// Тоже самое, что мы бы написали $(":checkbox:first").prop(“checked”, true);


* This source code was highlighted with Source Code Highlighter.

В jQuery 1.6, такой способ динамического проставления галочки в чекбоксе:

$(“:checkbox”).attr(“checked”, true);

* This source code was highlighted with Source Code Highlighter.

уже не сработает, т.к. тут нужно было поменять свойство, а не атрибут, т.е. всё, чего мы этим добились только что — поменяли значение по умолчанию.

Однако, когда jQuery 1.6 вышла в свет, команда разработчиков jQuery осознала, что это, наверное, не слишком полезная возможность — выставлять значения по умолчанию, которые браузер всё равно считывает только один раз — при загрузке страницы. Так что, с учётом этого факта, а также в интересах поддержания обратной совместимости, мы решили вернуть возможность задавать значения булевых атрибутов при помощи метода .attr() в jQuery 1.6.1.

Наиболее распространённые булевые атрибуты это checked, selected, disabled и readOnly, но вот вам полный их список (атрибутов и свойств, у которых в jQuery 1.6.1 можно динамически получать/задавать значения методом .attr()):

autofocus, autoplay, async, checked, controls, defer, disabled, hidden, loop, multiple, open, readonly, required, scoped, selected

* This source code was highlighted with Source Code Highlighter.

По-прежнему рекомендуется использовать .prop() для установки булевых атрибутов/свойств, однако ваш старый код продолжит работать с jQuery 1.6.1 как ни в чём не бывало.

Ниже — список некоторых атрибутов и свойств с указанием метода, который рекомендуется использовать для изменения значения в них (ещё раз, это предпочтительное использование, метод .attr() продолжит работать во всех случаях):

Атрибут/свойство
.attr()
.prop()
accesskey


align


async


autofocus


checked


class


contenteditable


draggable


href


id


label


location (например, window.location)


multiple


readOnly


rel


selected


src


tabindex


title


type


width (если требуется перекрыть .width())




Ни .attr(), ни .prop() не рекомендуется использовать для записи/чтения значений — для этих целей есть .val() (хотя, .attr(“value”, “somevalue”) по-прежнему будет работать, как и в 1.6).

Итого (предпочтительное использование)

Метод .prop() рекомендуется использовать для работы с булевыми атрибутами/свойствами, а также со свойствами, не присутствующими в html (например, window.location). Манипуляции со всеми остальными атрибутами (теми, что есть в html) могут (и должны) проводиться по-старому с использованием метода .attr().
Tags:
Hubs:
Total votes 49: ↑44 and ↓5+39
Comments20

Articles