Булевы атрибуты в HTML — это специальные атрибуты, которые могут быть
либо присутствующими на элементе, либо отсутствующими, при этом их
значение не имеет смысла в классическом виде. Примеры таких атрибутов:
checked, disabled, readonly,
required, autofocus. Если атрибут
присутствует, его логическое значение считается true; если
отсутствует — false.
Umbrella JS предоставляет удобные методы для работы с булевыми
атрибутами, что позволяет легко считывать и изменять их состояние без
прямого взаимодействия с DOM через getAttribute и
setAttribute.
Метод .attr() в Umbrella JS позволяет получать значение
атрибута:
u('input#subscribe').attr('checked'); // вернет true, если атрибут присутствует
Особенность работы с булевыми атрибутами в Umbrella JS заключается в том, что метод возвращает логическое значение, а не строку. Это упрощает условия и проверки:
if (u('input#subscribe').attr('checked')) {
console.log('Подписка активирована');
}
Отсутствие атрибута возвращает undefined, что трактуется
как false в логическом контексте.
Umbrella JS позволяет изменять булевы атрибуты с помощью метода
.attr(attrName, value):
// Установка атрибута
u('input#subscribe').attr('checked', true);
// Удаление атрибута
u('input#subscribe').attr('checked', false);
При передаче true атрибут добавляется к элементу, при
false — удаляется. Такой подход исключает необходимость
вручную использовать setAttribute и
removeAttribute, что делает код более читаемым и
лаконичным.
Если выборка содержит несколько элементов, метод .attr()
применяется ко всем одновременно:
u('input[type="checkbox"]').attr('checked', true); // все галочки будут установлены
При чтении значения с множественных элементов возвращается значение первого элемента в коллекции:
u('input[type="checkbox"]').attr('checked'); // проверяет состояние первого чекбокса
Это соответствует стандартной логике работы Umbrella JS и упрощает манипуляции в списках элементов.
Для элементов форм булевы атрибуты имеют особое значение:
disabled блокирует элемент формы.readonly делает поле ввода недоступным для
редактирования.required требует обязательного заполнения поля.Umbrella JS позволяет изменять их динамически, что полезно для управления интерфейсом без перезагрузки страницы:
// Блокировка всех полей формы
u('form#login input').attr('disabled', true);
// Разблокировка после проверки
u('form#login input').attr('disabled', false);
Помимо .attr(), Umbrella JS предоставляет метод
.prop(), который также работает с булевыми атрибутами, но
возвращает истинное состояние свойства элемента:
u('input#subscribe').prop('checked'); // true или false
Метод .prop() полезен при работе с элементами, состояние
которых может изменяться пользователем (например, флажки или
переключатели). Разница между .attr() и
.prop() заключается в том, что .attr()
отражает HTML-атрибут, а .prop() — текущее свойство
DOM.
Часто возникает задача переключения состояния булевого атрибута. Umbrella JS позволяет сделать это лаконично:
u('input#subscribe').attr('checked', function(el) {
return !el.checked;
});
Функция получает текущий элемент, что позволяет вычислить новое состояние на основе текущего свойства, без необходимости отдельно считывать и записывать значение.
.attr(attr, true|false).disabled,
readonly, required)..prop() для получения актуального
свойства элемента.Эти возможности делают работу с булевыми атрибутами в Umbrella JS предельно удобной и позволяют писать компактный, понятный код при манипуляциях с элементами формы и интерфейсом.