Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.11.2019, 21:42
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Как воспроизвести кастомное событие при событии 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 из проверки выше. таких страниц может быть много.
Ответить с цитированием
  #2 (permalink)  
Старый 22.11.2019, 13:15
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Конструкция "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>
Ответить с цитированием
  #3 (permalink)  
Старый 23.11.2019, 12:25
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

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

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
          }
        }
      }))

    })
  })
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кастомное событие marc Events/DOM/Window 1 17.02.2018 19:08
Как назначить событие при фокусе на все ссылки —сразу производить переход (по ссылке) developer Элементы интерфейса 4 27.10.2013 13:35
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Как сделать, чтобы при наведении на кнопку справа от нее появлялись текстовые ссылки? Tass Общие вопросы Javascript 7 17.02.2011 09:06
как проверить поддеружет браузер определенное событие? GOll Элементы интерфейса 9 24.07.2008 14:40