Свойства
Кроме атрибутов также есть свойства элементов, к ним относятся selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked и defaultSelected. Ну, вроде бы, список невелик, можно и запомнить. Для работы со свойствами используем методы из семейства prop():
prop(propertyName)получение значения свойства
prop(propertyName, value)установка значения свойства
prop({
propertyName1: value,
propertyName2: value
})установка нескольких значений
prop(propName,
function(index, value) {
return value
}
)используя функцию обратного вызова
index это порядковый номер элемента в выборке
value — текущее значение атрибута
removeProp(propName)удаление свойства (скорей всего, никогда не понадобится)
А теперь выключите музыку, и запомните следующее – для отключения элементов формы и для проверки/изменения состояния чекбоксов мы всегда используем метод prop(), пусть вас не смущает наличие одноименных атрибутов в HTML (это я про «disabled» и «checked»), используем prop() и точка.
Давайте на примере:
Посмотрите, как работает система без нашего вмешательства — кликните чекбокс, селектбокс, попробуйте отправить форму.
Теперь приступим к серии экспериментов (не забудьте обновить страничку):
Ставим галочку на чекбоксе посредством метода
attr():$("#checkbox").attr("checked", "checked")Теперь снимите галочку мышкой — значение
attr()осталось без изменений, значениеprop()изменилосьПопробуйте ещё раз поставить галочку, используя метод
attr()
Следующий эксперимент:
Поставьте мышкой галочку на чекбоксе
Снимите галочку — значение
attr()не изменяетсяПопробуйте установить значение посредством вызова:
$("#checkbox").attr("checked", "checked")
В данном эксперименте интересен следующий момент: вызов метода attr("checked", "checked") не срабатывает после того, как пользователь изменял статус чекбокса
Ну и ещё один эксперимент со вторым чекбоксом:
Удаляем галочку:
$("#checkbox").removeAttr("checked")Ставим галочку:
$("#checkbox").attr("checked", "checked")Опять удаляем галочку, используя метод
attr()Повторяем до упаду
Работает — не трожь, мышкой всё сломаете :)
Сравните с поведением метода prop():
Удаляем галочку:
$("#checkbox").prop("checked", false)Ставим галочку:
$("#checkbox").prop("checked", true)Можем кликать мышкой по чекбоксу и повторять предыдущие пункты в произвольном порядке, всё будет работать как часы
Надеюсь, я достаточно наглядно дал понять, когда надо использовать
attr(), а когдаprop()
Это ещё не всё, у нас же есть ещё свойство disabled! Но не волнуйтесь, его поведение более предсказуемо, т.к. пользователь не может вмешиваться в его состояние:
Включаем радио-кнопку:
$("#radio").attr("disabled", false)Выключаем:
$("#radio").attr("disabled", true)Повторяем
Аналогичное поведение при использовании метода prop():
Включаем:
$("#radio").prop("disabled", false)Выключаем:
$("#radio").prop("disabled", true)Повторяем
Ну, как бы, можно использовать
attr(), но нет!
Last updated