KorniloFF
@KorniloFF
Работаю по font-end / JS

Как отловить EventListener при ajax?

Всем привет!
Гуглю второй день, ничего путного, может кто-то сталкивался?

Контент сайта грузится асинхронным запросом. Контент содержит в себе скрипты, которые отрабатываются при его загрузке. До этого этапа всё хорошо, работает.

Теперь внимание!

Когда скрипты внутри контента содержат обработчики событий, добавленные через addEventListener - они не исполняются. Получить список обработчиков, висящих на DOM-элементе, средствами броузера не возможно. Иначе было бы всё просто - исполнить их по загрузке контента.
Конкретно интересует обработка событий load и pageshow. И именно добавленных через addEventListener.
  • Вопрос задан
  • 2967 просмотров
Пригласить эксперта
Ответы на вопрос 3
@asd111
Скрипты, загруженные через ajax НЕ выполняются. Их нужно выполнять вручную.
Получаем нужный javascript со всеми event listener через AJAX:
<script type="text/javascript" id="runscript">
    alert("running from main");
</script>

После получения делаем:
eval(document.getElementById("runscript").innerHTML);


Но лучше взять vuejs и забыть про проблемы на фронтенде.
Ответ написан
@darksladen
Повесьте обработчик на document.
document.addEventListener("click", function(e) {
// e.target is the clicked element!
// If it was an item with class 'foo'
if(e.target && e.target.className == "foo") {
console.log("foo "+e.target.innerText+" was clicked!");
}
});
Ответ написан
SynCap
@SynCap
Делаю интернет с 1998 года
1. Обработчики должны быть всплывающими (propogate), если работать с ДОМ. Перегружать нужно не всю страницу, а лишь объект (body, content, конкретный div и тп), в таком случае ДОМ обработчики (click, resize, keyboard ...) должны стоять на родительском для перегружаемого объекте. Читайте про event bubbling и event propagation
2. Интересующие тебя обработчики - можно симулировать событие. В частности onload срабатывает 1 раз на загрузке страницы, и фффсее. НО, в таком случае при загрузке нового конетнта, кто мешает вызвать обработчик принудительно? Тот же обработчик на onload и тотже на AJAX success
3. Посмотри в сторону JSONP
4. не мучайся, возьми Vue
Ответ написан
Ваш ответ на вопрос

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

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