Ситуация:
Я перехватываю событие и устанавливаю в кастомное свойство свои данные
jQuery("#element_id").click(function(){
event.custom_property = {'any_data'};
});
Позже данное событие перехватывает и обрабатывает функция подключенного стороннего компонента. Происходит там примерно следующее:
if(e.hasOwnProperty('custom_property')){
//обработка прокинутых данных
}
Однако, к моему огорчению мои данные не были обработаны.
Отладив в debugger'е, я установил что e.hasOwnProperty('custom_property') возвращает false и не переходит к обработке данных.
Проинспектировав сам объект события, обнаружил что это не оригинальный объект события, а оболочка созданная jQuery(насколько я могу судить), со всем тем же набором данных, кучей плюшек от jQuery, но при этом без пользовательских свойств.
Оригинальный объект события также доступен в оболочке. Он находится в свойстве originalEvent. И уже в нём есть все те данные, которые я прокинул.
Соответственно, проверка e.originalEvent.hasOwnProperty('custom_property') уже будет давать необходимый нам результат, однако по понятным причинам я не могу просто так пойти и запилить правку в стороннем компоненте ибо после первого же обновления, всё это великолепие слетит.
По-хорошему нужно прокинуть данные именно в оболочку. Однако, проблема в том, что при обработке события я получаю именно оригинальный объект события.
Внимание, вопрос:
Есть ли способ, при обработке события с помощью jQuery получить не оригинальные объект события, а его оболочку, созданную всё тем же jQuery.
Первым параметром всех обработчиков является объект события. Не зависимо от того нативный обработчик (добавленный с помощью .addEventListener), либо обработчик jQuery.
В обоих случаях это будет нужный объект события: нативный в первом случае и обертка jQuery во втором.
Следовательно нужно изменить код так:
jQuery("#element_id").click(function(e){
e.custom_property = {'any_data'};
});
Кроме того нужно убедиться, что этот обработчик будет выполняться до перехватывательщика, иначе данное поле все равно будет не определено в момент проверки.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости