Доступ к оболочке события

222
04 декабря 2017, 16:07

Ситуация:

Я перехватываю событие и устанавливаю в кастомное свойство свои данные

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.

Answer 1

Первым параметром всех обработчиков является объект события. Не зависимо от того нативный обработчик (добавленный с помощью .addEventListener), либо обработчик jQuery.

В обоих случаях это будет нужный объект события: нативный в первом случае и обертка jQuery во втором.

Следовательно нужно изменить код так:

jQuery("#element_id").click(function(e){
   e.custom_property = {'any_data'};
});

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

READ ALSO
Проверка на пустоту блока

Проверка на пустоту блока

Можно ли проверить на пустоту блока "blog", если он пустой то мы добавляем таблицу, а если в нем уже есть название и хотя бы одна ячейка, то мы к тому...

234
Spannable и Html не работают совместно

Spannable и Html не работают совместно

Использую spannable для реализации сносок в приложении:

279
Отступ после футера

Отступ после футера

Перерыл уже весь гугл, как только не пытался баловаться со стилями

254
Мне нужно получить код страницы или скачать html файл автоматически. Проблема - сайт понимает, что запросы автоматические и выдает капчу

Мне нужно получить код страницы или скачать html файл автоматически. Проблема - сайт понимает, что запросы автоматические и выдает капчу

Как можно это обойти? Любыми способамиХочется именно не взломать капчу, а обойти само ее генерирование - то есть чтобы она вообще не появлялась

198