Menu

trigger VS dispatchEvent

Когда работаешь над проектом с использованием jQuery, то генерацию пользовательских событий делаешь через trigger.

И вроде все работает...

Но вот странички, на которых вы сейчас находитесь -- это больше экспериментальное создание. Поэтому оно использует как jQuery, так и нативные обработчики и генераторы событий (это касается не только событий).

Один из моментов, где использовалось пользовательское такое событие -- сигнал о полной загрузке всех требуемых компонентов. По этому событию, например, начинает работать слайдер на главной странице.

Стоит уточнить, что это событие генерируется на объект window.

До недавнего времени использовалась конструкция:

var evt = new Event("libs_loaded");

window.dispatchEvent(evt);

Надо же где-то и над чем-то экспериментировать. :)

И все вроде хорошо, когда пользуешься только Chrome, на крайний случай FF или другой "пушистый" браузер.

Но как дело доходит до IE, причем 10 версии, то все сразу плохо.

В IE10, команда new Event выдает ошибку.

Хорошо, меняем эти строчки на более привычную:

jQuery(window).trigger("libs_loaded");

И..... вообще не работает. %)

Конечно, возможно генерировать события на window и не очень хорошо, но мне именно так, и сейчас хочется, почему я должен себе в этом отказывать....

Оказалось, что если слушатель указывается так же при помощи jQuery, т.е. jQuery.on(...) -- то работает.

Но если слушатель использует нативную addEventListener - то ничего не работает в случае с window.

Живой пример можно увидеть тут.


Tags:
js, events, jquery, dispatchEvents

Keep your comment...