JavaScript dispatchEvent() — згенерувати подію з коду


Метод dispatchEvent() запускає подію з коду — так, ніби її спричинив користувач.

автор: NagarD

Загальний опис

Головна цінність — власні події. Компонент може повідомити світ «я завантажив дані» чи «користувач обрав товар», не знаючи нічого про тих, хто його слухає. Це найдешевший спосіб розв'язати зв'язки між частинами застосунку.

Створюється подія через CustomEvent, а дані передаються в полі detail.

Дві опції, про які варто знати: bubbles: true дозволяє події спливати вгору по дереву (без неї подію почує лише сам елемент), а composed: true пускає її ще й за межі тіньового DOM — без цього подія з веб-компонента назовні не вийде.

автор: NagarD

Нотатка

Штучна подія click не робить того, що робить справжній клік користувача: вона не відкриє нове вікно й не запустить те, що вимагає «жесту користувача». Браузер відрізняє справжній клік від згенерованого.

автор: NagarD

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
dispatchEvent 1+ 1+ 1+ 7+ 12+ 9+
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
dispatchEvent yes yes yes yes

Приклади

+ запропонувати свій приклад у пісочниці

Компонент повідомляє про подію, не знаючи, хто його слухає.

HTML

<button id="emitter">Компонент</button>

JS

const element = document.getElementById('emitter');

// хтось інший слухає — на будь-якому рівні вище
document.addEventListener('item:selected', event => {
    console.log('Обрано:', event.detail.name);
});

// компонент повідомляє світ
element.dispatchEvent(new CustomEvent('item:selected', {
    detail: { id: 42, name: 'CSS' },
    bubbles: true,   // подія спливе вгору по дереву
    composed: true,  // вийде і за межі тіньового DOM
}));

// штучний клік — але «жесту користувача» він не дає
element.dispatchEvent(new Event('click'));
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід