Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как воспроизвести кастомное событие при событии load? (https://javascript.ru/forum/events/78914-kak-vosproizvesti-kastomnoe-sobytie-pri-sobytii-load.html)

CryNet 21.11.2019 21:42

Как воспроизвести кастомное событие при событии 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 из проверки выше. таких страниц может быть много.

Vlasenko Fedor 22.11.2019 13:15

Конструкция "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>

CryNet 23.11.2019 12:25

Сделал всё-таки через имитацию события:

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.