Подтвердить что ты не робот

Преобразование собственного объекта события браузера в объект события jQuery

Я назначаю функцию обработчика события элементу через собственное свойство onclick браузера:

document.getElementById('elmtid').onclick = function(event) { anotherFunction(event) };

Когда я нахожусь в anotherFunction(event), я хочу иметь возможность использовать объект события, как я бы, с объектом события, который вы получаете в jQuery, с помощью метода .on(). Я хочу сделать это, потому что объект события jQuery имеет свойства и методы, такие как .pageX, .pageY и .stopPropagation(), которые работают во всех браузерах.

Итак, мой вопрос: после того, как я прошел в свой собственный объект события браузера в anotherFunction(), как я могу превратить его в событие jQuery? Я пробовал $(event), но это не сработало.

Очевидный вопрос: почему бы вам просто не использовать jQuery .on, .bind, .click и т.д., чтобы назначить функции обработки событий? Ответ: Я строю страницу с огромным столом с множеством кликабельных вещей. К сожалению, для этого проекта требуется, чтобы страница быстро отображалась в IE6 и IE7. Использование .on et al в IE6 и IE7 создает утечки DOM и очень быстро перерастает память (проверьте для себя с помощью Drip: http://outofhanwell.com/ieleak/index.php?title=Main_Page). Настройка поведения onclick с помощью .onclick - единственная опция, которую я должен быстро визуализировать в IE6 и IE7.

4b9b3361

Ответ 1

Слишком долго для комментария... Поскольку документация немного расплывчата в этом... (я смотрю 1.7.1 в следующем)

jQuery.Event(event, props):

  • создает новый объект
  • устанавливает свойство type в свойство события type.
  • устанавливает isDefaultPrevented стандартными вызовами ко всем способам проверки, не разрешено ли по умолчанию.
  • устанавливает originalEvent для ссылки на событие, в которое вы прошли.
  • добавляет произвольный набор свойств, предоставляемый аргументом объекта props.
  • устанавливает метку времени.
  • отмечает объект "fixed".

То, что вы получаете, это в основном новый объект с несколькими дополнительными свойствами и ссылкой на исходное событие - никакой нормализации, кроме isDefaultPrevented.

jQuery.event.fix(event):

  • игнорирует объекты, которые уже отмечены как "фиксированные".
  • делает записываемый экземпляр (посредством jQuery.Event()) и нормализует упомянутые свойства здесь.

ETA:

Собственно, глядя ближе к коду, jQuery.event.fix() должен работать - таким образом, как описано в Beetroot-Beetroot. Это все, что делает jQuery для создания объекта события jQuery при отправке события.

Ответ 2

Вы хотите jQuery.event.fix.

new jQuery.Event(nativeEvent)

Обратите внимание, что в этой точке событие не имеет каких-либо свойств "eventy", просто originalEvent, timeStamp и функций барботажа/предотвращения по умолчанию.

jQuery.event.fix(nativeEvent)

Ответ 3

Попробуйте следующее:

document.getElementById('elmtid').onclick = anotherFunction;

с:

function anotherFunction(evt){
    evt = $.event.fix(evt || window.event);//Note need for cross-browser reference to the native event
    ...
}

http://jsfiddle.net/Wrzpb/