Источник: http://learn.javascript.ru/fixevent
Если собрать все несовместимости для событий, свойственные IE, которые описаны в этой главе — их устранение можно описать единой функцией fixEvent
.
Эта функция работает так:
elem.onclick = function(e) {
e = fixEvent(e); // в начале обработчика
...
}
Объект события, при необходимости, будет взят из window.event
.
Функция fixEvent
добавляет объекту события в IE следующие стандартные свойства:
Можно также передать this
вторым аргументом, и он будет записан в currentTarget
:
elem.onclick = function(e) {
e = fixEvent(e, this);
alert(e.currentTarget == this); // true, как и должно быть по стандарту
...
}
Код функции:
function fixEvent(e, _this) {
e = e || window.event;
if (!e.currentTarget) e.currentTarget = _this;
if (!e.target) e.target = e.srcElement;
if (!e.relatedTarget) {
if (e.type == 'mouseover') e.relatedTarget = e.fromElement;
if (e.type == 'mouseout') e.relatedTarget = e.toElement;
}
if (e.pageX == null && e.clientX != null ) {
var html = document.documentElement;
var body = document.body;
e.pageX = e.clientX + (html.scrollLeft || body && body.scrollLeft || 0);
e.pageX -= html.clientLeft || 0;
e.pageY = e.clientY + (html.scrollTop || body && body.scrollTop || 0);
e.pageY -= html.clientTop || 0;
}
if (!e.which && e.button) {
e.which = e.button & 1 ? 1 : ( e.button & 2 ? 3 : (e.button & 4 ? 2 : 0) );
}
return e;
}