Как воспроизвести кастомное событие при событии load?
Есть много логики при кастомном событии choice с использованием делегирования для тега select, где:
if (event.detail.choice.value === "1") { // запускаем одну функцию }
if (event.detail.choice.value === "2") { // запускаем другую функцию }
if (event.detail.choice.value === "3") { // запускаем третью функцию }
То есть если выбрали один option - выполняем одну функцию, выбрали другой - другую, появляются какие-то блоки, окошки, формы и т.д. Они появляются в результате выполнения этих самых функций из проверки выше. Пользователь сохраняет данные. Данные уходят на сервер. Открывает страницу снова - все эти блоки, окошки, формы и т.д должны открыться, как будь-то он только что выбрал и отработала функция. Данные в нужные поля приходят - их не учитываем. Нужно только отобразить необходимые блоки, окошки, формы и т.д. Как это сделать? Выбранным option передаётся в data-attribute их value из проверки выше. таких страниц может быть много. |
Конструкция "switch"
Вариант с объектом Вы можете еще динамически формировать имя фнкции window['a'+'lert']('as')
<script>
function a(v) {
alert('a: '+ v)
}
function b(v) {
alert('b: '+ v)
}
var obj = {1: a, 2: b};
obj[2]('hi');
obj[1]('ok');
</script>
|
Сделал всё-таки через имитацию события:
let elements = frstItem.concat(scndItem, lstItem)
elements.forEach(element => {
let choices = element.querySelectorAll('.choices__list.choices__list--single .choices__item--selectable')
choices.forEach(element => {
let value = element.getAttribute('data-value')
let choices = element.closest('.choices').querySelector(`.choices__list.choices__list--dropdown .choices__list [data-value="${value}"]`)
choices.addEventListener("choice", ruleEvent)
// у кастомного события в этом контексте нет event.detail.choice.value
// поэтому выше вытягивает его из дата-атрибута, а тут присваиваем
choices.dispatchEvent(new CustomEvent("choice", {
detail: {
choice: {
value: value
}
}
}))
})
})
|
| Часовой пояс GMT +3, время: 02:24. |