Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Отследить появление элемента (https://javascript.ru/forum/events/86173-otsledit-poyavlenie-ehlementa.html)

Timurkin 13.11.2024 18:57

Отследить появление элемента
 
Нужно прокидывать цель в метрику после отправки формы.
Пытаюсь привязаться к событию после того как форма отправлена, в модальном окне появляется:
<div class="wpforms-confirmation-container" id="wpforms-confirmation-1113"><p>Спасибо, что написали нам! Мы свяжемся с вами в ближайшее время.</p>
</div>


Делаю так:
if (document.querySelectorAll("#wpforms-confirmation-1113").length > 0) 
{console.log("форма отправлена");
}


Но не срабатывает :(

ksa 14.11.2024 11:14

Цитата:

Сообщение от Timurkin
Делаю так

Вполне может быть, что на момент проверки элементов просто нет.

Так же можно напомнить что:
- ИД должен быть уникальным на странице и querySelectorAll можно и не применять к селектору идентификатора.
- Если важен сам факт наличия элементов, можно укоротить условие
document.querySelectorAll("селектор").length

Этого будет достаточно.
Или вообще вот так
document.querySelector("селектор")

Timurkin 14.11.2024 16:05

Цитата:

Сообщение от ksa
Вполне может быть, что на момент проверки элементов просто нет.

А как тогда написать, нужен прослушиватель event listener ?

ksa 14.11.2024 16:11

Цитата:

Сообщение от Timurkin
нужен прослушиватель event listener ?

Как вариант, использовать наблюдатель - MutationObserver.
Работа с ним хорошо описана в здешнем учебнике - https://learn.javascript.ru/mutation-observer

Timurkin 14.11.2024 19:28

Цитата:

Сообщение от ksa (Сообщение 556431)
Как вариант, использовать наблюдатель - MutationObserver.
Работа с ним хорошо описана в здешнем учебнике - https://learn.javascript.ru/mutation-observer

Спасибо, нашел код, работает:
function handleMutation(mutationsList, observer) {
  for (const mutation of mutationsList) {
    if (mutation.type === 'childList') {
      for (const addedNode of mutation.addedNodes) {
        if (addedNode instanceof HTMLElement && addedNode.classList.contains('wpforms-confirmation-container')) {
          console.log('Появился новый элемент');
          observer.disconnect();
        }
      }
    }
  }
}
const observer = new MutationObserver(handleMutation);
observer.observe(document.body, { childList: true, subtree: true });


Единственное, не могу понять, как проверять не на класс, а на id ?

ksa 15.11.2024 09:18

Цитата:

Сообщение от Timurkin
как проверять не на класс, а на id ?

Еще проще ;)
Цитата:

Сообщение от Timurkin
addedNode.classList.contains('wpforms-confirmation-container')

Заменить на
addedNode.id === 'нужный_ИД'

Timurkin 16.11.2024 10:34

ksa, все работает, спасибо)


Часовой пояс GMT +3, время: 19:36.