@Sh3nku

Как повесить событие, чтобы оно сработало на динамически созданном объекте?

Доброго времени суток

Хочу повесить обработчик на все поля type=tel, но есть проблема, если открывается попап (подгружается из файла, его нет в разметке) и там присутствует это поле, то события никакого нет, знаю как это сделать в jquery
$( document ).on( 'click', 'p.target', function () {
    alert('Клик');
});

А как это сделать на нативном JS. Подскажите, буду благодарен.

p.s. подключаю imask таким способом
document.querySelectorAll( 'input[type=tel]' ).forEach( e => IMask( e, {
        mask: '+{7} ( 000 ) 000-00-00'
    }));

и работает это только с теми полями, которые загружаются при заходе на страницу
  • Вопрос задан
  • 79 просмотров
Решения вопроса 2
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
у вас неточность. в примере на jquery вы просто ловите событие
а в примере на ваниле хотите инициализировать плагин.

Это разные вещи.

Поймать событие просто. Вешайте обработчик на document и смотритте что прилетело в event.target

В случае с плагином, если он сам не поддерживает инициализацию на созданных в рантайме элементах, вам придется самостоятельно отслеживать появление новых узлов в DOM и по условиям инитить на них плагин. Но это в общем случае, для универсальности. В частном случае можно вклинится в процедуры открытия тех же попапов и там подключать маску. Например напрямую в клике кнопки "Открыть попап", или удобнее, в обработчике события "popup.opened" (условно, я не знаю, какие попапы у вас используются, но у большинства плагинов есть события открытия/закрытия).
Ответ написан
Комментировать
VoidVolker
@VoidVolker Куратор тега JavaScript
Dark side eye. А у нас печеньки! А у вас?
Очевидно, что надо сделать ровно то же самое и для нового добавленного элемента. Либо сразу после его загрузки либо после его присоединения к дереву. Т.е., создали/присоединили элемент к дереву - и сразу же подключить к нему imask.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы