Преобразование собственного объекта события браузера в объект события 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.
Ответы
Ответ 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/