@Mishcake

Почему скрипт не видит элемента в DOM, который подгружается сторонним скриптом?

Всем привет. Столкнулся с проблемой, которую не пойму, как решить.

Ситуация: на страница есть большая форма. У меня нет доступа к исходному коду формы и я не знаю, какие другие скрипты ею управляют. Я лишь могу сделать вставку своего кастомного кода внизу страницы.

Проблема: к форме каким-то скриптом добавляются кнопки "Назад" и "Далее", которые отвечают за переключение вопросов формы. Я хочу отследить клик по этим кнопкам, чтобы сделать нужные мне действия.

Пишу такой обработчик клика:
...
document.querySelector('div.btn-singly-controls > button.btn.btn-next.btn-success').style.display = 'none';
...


Путь к элементу 100% точен. Копирую из инспектора через меню Copy JS path.

А дальше странности.

Если перезагрузить страницу, дождаться полной загрузки, открыть консоль и выполнить код выше — ничего не произойдет. Хотя кнопка с этими классами уже есть в DOM, я вижу её на странице. Можно повторить выполнение кода 5-10-50 раз, ничего не произойдет.

Но если я открою инспектор, снова скопирую JS-путь к элементу и после этого выполню команду в консоли — элемент пропадёт.

В чём может быть прикол? Почему так происходит?

Думаю, по той же причине не работает мой код. Я отслеживаю клик по этой кнопке и триггер не срабатывает, как будто скрипт не видит этого элемента в DOM. Хотя он есть. Скрипт загружается последним, дожидаясь загрузки страницы, поэтому это вдвойне странно.

В качестве альтернативного решения — привязывал триггер к потере фокуса в поле ввода. Отслеживаю потерю фокуса поля и меняю цвет кнопки по тому же классу (из примера выше). Код работает! Но мне такое решение не подходит, нужно отследить именно клик по кнопке :(
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
@FKV
Используйте делегирование событий. Если в кратце, вешайте прослушку события клик на документ и проверяйте на каком элементе был клик, если на нужной кнопке, то выполняйте свой код.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы