Вступление #
Группа с возможностью выбора одного или нескольких элементов.
Для работы можно использовать класс .js-choice-group по умолчанию и специальную разметку.
Установка #
Пример разметки и инициализации группы элементов.
<div class="js-choice-group" aria-label="Тип архитектуры">
<button
class="choice-group-item"
type="button"
aria-checked="true"
data-choice-group-value="Модерн"
>
Модерн
</button>
<button class="choice-group-item" type="button" data-choice-group-value="Модернизм">
Модернизм
</button>
<button class="choice-group-item" type="button" data-choice-group-value="Конструктивизм">
Конструктивизм
</button>
<button class="choice-group-item" type="button" data-choice-group-value="Постмодернизм">
Постмодернизм
</button>
<button class="choice-group-item" type="button" data-choice-group-value="Хай-тек">
Хай-тек
</button>
<button class="choice-group-item" type="button" data-choice-group-value="Деконструктивизм">
Деконструктивизм
</button>
<button class="choice-group-item" type="button" data-choice-group-value="Параметризм">
Параметризм
</button>
</div>
Чтобы заранее выделить активный элемент, на триггер необходимо навесить aria-checked="true".
BasicChoiceGroup.init('.my-choice-group')
BasicChoiceGroup.init(document.querySelector('.my-choice-group'))
BasicChoiceGroup.init(document.querySelectorAll('.my-choice-group'))
// или
BasicChoiceGroup.init() // по умолчанию инициaлизирует элементы с классом .js-choice-group
Множественный выбор #
Чтобы включить множественный выбор, можно использовать атрибут data-choice-group-type со значением multiple.
<div class="js-choice-group" data-choice-group-type="multiple" aria-label="Тип архитектуры">
<button
class="choice-group-item"
type="button"
aria-checked="true"
data-choice-group-value="Модерн"
>
Модерн
</button>
<button
class="choice-group-item"
type="button"
aria-checked="true"
data-choice-group-value="Модернизм"
>
Модернизм
</button>
<button class="choice-group-item" type="button" data-choice-group-value="Конструктивизм">
Конструктивизм
</button>
<button class="choice-group-item" type="button" data-choice-group-value="Постмодернизм">
Постмодернизм
</button>
<button class="choice-group-item" type="button" data-choice-group-value="Хай-тек">
Хай-тек
</button>
<button class="choice-group-item" type="button" data-choice-group-value="Деконструктивизм">
Деконструктивизм
</button>
<button class="choice-group-item" type="button" data-choice-group-value="Параметризм">
Параметризм
</button>
</div>
Методы #
selected() #
Выбрать элемент из группы.
BasicChoiceGroup.selected({
el: '.my-choice-group',
value: 'Модернизм',
})
Где в конфигурациях указывается:
| Название | Тип | Описание |
|---|---|---|
el |
object/string |
Родительский блок группы. |
value |
string |
Значение элемента, который необходимо выбрать. |
disabled() #
Заблокировать элемент группы. Невозможно будет с ним взаимодействовать.
BasicChoiceGroup.disabled({
el: '.my-choice-group',
value: 'Модернизм',
})
Где в конфигурациях указывается:
| Название | Тип | Описание |
|---|---|---|
el |
object/string |
Родительский блок группы. |
value |
string |
Значение элемента, который необходимо заблокировать. |
enabled() #
Разблокировать элемент группы.
BasicChoiceGroup.enabled({
el: '.my-choice-group',
value: 'Модернизм',
})
Где в конфигурациях указывается:
| Название | Тип | Описание |
|---|---|---|
el |
object/string |
Родительский блок группы. |
value |
string |
Значение элемента, который необходимо разблокировать. |
clearAll() #
Полностью очистить группу от выбора.
BasicChoiceGroup.clearAll('.my-choice-group')
// или
BasicChoiceGroup.clearAll(document.querySelector('.my-choice-group'))
getValue() #
Получить значение группы.
BasicChoiceGroup.getValue('.my-choice-group')
// или
BasicChoiceGroup.getValue(document.querySelector('.my-choice-group'))
Значение, которое приходит в ответ, может быть двух видов:
string— Для обычной группы;array— Для группы с множественным выбором.
Экземпляр #
У каждого инициализированного элемента есть свой экземпляр.
const myСhoiceGroup = document.querySelector('.my-choice-group')
console.log(myСhoiceGroup.BasicСhoiceGroup) // пример экземпляра
В настоящее время экземпляр поддерживает все методы.
Прослушивание событий #
Можно прослушать события элемента и получить нужные параметры.
choiceGroup:change #
Срабатывает при переключении дочерних элементов.
Параметры:
| Название | Тип | Описание |
|---|---|---|
event.detail.type |
string |
Тип группы(default или multiple). |
event.detail.index |
number |
Индекс выбранного элемента. |
event.detail.next |
object |
Элемент, на котором произошло событие. |
event.detail.previous |
object |
Предыдущий выбранный элемент. |
event.detail.value |
string |
Итоговое значение выбранного/выбранных элементов. |
const myChoiceGroup = document.querySelector('.my-choice-group')
myChoiceGroup.addEventListener(
'choiceGroup:change',
function () {
console.log(event.detail) // параметры
},
false,
)