Мы подошли к первому обновлению jQuery 1.6 и рады сообщить о выходе первого релиз-кандидата! Данный код, скорее всего, пойдёт в итоговую версию 1.6.1 (она выйдет ближе к концу недели) — всё, кроме (возможных) критических багов, конечно же.
Скачать код можно из jQuery CDN:
http://code.jquery.com/jquery-1.6.1rc1.js
Можете поспособствовать нам, поместив этот код в ваше рабочее приложение и дав знать, если что-то перестанет работать. В этом случае, пожалуйста, убедитесь, что вы тестируете конкретно jQuery 1.6.1 RC 1 и заведите баг.
Мы собираемся поощрять любые инициативы участников сообщества по внесению полезных изменений в ядро jQuery. Мы подготовили целую страницу с подробной информацией, призванную упростить этот процесс. Наша команда здесь и готова помочь вам помочь нам!
Появление нового метода
Ниже вы найдёте описание изменений в модуле «Атрибуты» в jQuery 1.6 и 1.6.1, а также рекомендации по предпочтительному использованию методов
Недавние изменения в модуле «Атрибуты» устранили разночтения и двусмысленность в поведении атрибутов и свойств, но в тоже время вызвали смятение в рядах jQuery-сообщества, т.к. во всех версиях jQuery вплоть до 1.6 для работы и с атрибутами, и со свойствами использовался один единственный метод (
В jQuery 1.6.1 были исправлены несколько багов, а также (снова) обновился модуль «Атрибуты».
Итак, булевые атрибуты (такие как checked, selected, readonly и disabled) в 1.6.1 ведут себя точно также как и в прежних версиях jQuery — вплоть до 1.6. Таким образом, код типа такого:
или даже такой:
— можно не менять при переходе на 1.6.1 и оставить как есть (ничего не сломается).
Прояснить суть изменений, сделанных в jQuery 1.6 в отношении метода
Во-первых, вызов метода
Далее, checked, selected и другие вышеупомянутые атрибуты обрабатываются особым образом, т.к. имеется специальная взаимосвязь между этими атрибутами и соответствующими свойствами. В простейшем случае, атрибут это то, что вы видите в html:
Булевые атрибуты (например, checked) задают только значение по умолчанию (во время инициализации страницы). В случае чекбокса, атрибут checked определяет будет ли в нём стоять галочка при загрузке страницы.
Свойства, в свою очередь, это то, с помощью чего браузер отражает изменения в текущих значениях. Обычно значения свойств отражают значения соответствующих атрибутов (если таковые существуют). Однако, в случае булевых атрибутов — всё иначе. Булевые свойства остаются в актуальном состоянии (с актуальными значениями), если пользователь убрал галочку с чекбокса или выбрал пункт из выпадающего списка. Соответствующий атрибут — нет (как было уже отмечено выше, они используются только для хранения значения по умолчанию).
В jQuery 1.6, такой способ динамического проставления галочки в чекбоксе:
уже не сработает, т.к. тут нужно было поменять свойство, а не атрибут, т.е. всё, чего мы этим добились только что — поменяли значение по умолчанию.
Однако, когда jQuery 1.6 вышла в свет, команда разработчиков jQuery осознала, что это, наверное, не слишком полезная возможность — выставлять значения по умолчанию, которые браузер всё равно считывает только один раз — при загрузке страницы. Так что, с учётом этого факта, а также в интересах поддержания обратной совместимости, мы решили вернуть возможность задавать значения булевых атрибутов при помощи метода
Наиболее распространённые булевые атрибуты это checked, selected, disabled и readOnly, но вот вам полный их список (атрибутов и свойств, у которых в jQuery 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=”checkbox” checked=”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()
.