У меня странная проблема с обработкой событий в JavaScript. Большинство моих событий работают нормально, используя следующий формат:
var myCustomEvent = new CustomEvent('myEvent', {
detail: {data: myData}
});
this.element.dispatchEvent(myCustomEvent);
Где this.element
относится к переменной element
в пользовательском объекте. Этот код будет вызываться в одной из функций-прототипов этого объекта. Соответствующий обработчик событий выглядит следующим образом:
d3.select('#container').on('myEvent', function() {
that.foo(d3.event.detail);
})
Этот обработчик выполняется в функции-прототипе другого объекта.
Опять же, это обычно работает нормально, однако я столкнулся с несколькими местами, где этот код не работает. Событие никогда не вызывает обработчик. Фактически, единственный способ, которым мне удалось зарегистрировать событие в обработчике, - это использовать jQuery:
$(this.element).trigger('myEvent', [{data: myData}]);
С обработчиком событий:
$(d3.select('#container').node()).on('myEvent', function(e, data) {
that.foo(data);
})
Я понимаю, что это на самом деле не воспроизводимый пример, но мне интересно, сталкивался ли кто-нибудь с чем-то подобным раньше или у кого-нибудь есть идеи относительно того, в чем может быть проблема.