Как воспроизвести кастомное событие при событии 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, время: 21:23. |