2011-01-10 3 views
6

Я ищу хороший ресурс для нормализации событий в объекте события. Я пытаюсь сделать это сам, но я чувствую, что я что-то пропущу.Перекрестный браузер Нормализация объекта событий?

Вот что у меня есть, скажите мне, пропустил ли я что-нибудь.

var eFix = function(e) { 
    e = e || window.event; 
    e.target = e.target || e.srcElement; 
    e.offsetX = e.offsetX || e.layerX; 
    e.offsetY = e.offsetY || e.layerY; 
    e.relatedTarget = e.relatedTarget || 
     e.type == 'mouseover' ? e.fromElement : e.toElement; 
    e.target = e.target || e.srcElement; 
    if (target.nodeType === 3) target = target.parentNode; //Safari bug 
    return e; 
}; 

Кто-нибудь видел полную функцию нормализации? Я что-то пропустил? (Излишне говорить, что мы собираемся для W3C модели не IE)

+0

Вы против использования jQuery? Это позаботится об этом для вас ... –

+4

@Brad Christie Это для учебных целей, и я бы предпочел не раздувать мой код только для нормализации событий – qwertymk

+5

@qwertymk Согласен. Люди слишком быстры, чтобы включить в каждую библиотеку, известную человеку, просто использовать от нее одну функцию. На самом деле это грустно. – crush

ответ

2

Существует еще одна проблема, с кодом:

e.layerX работает только на расположенных элементов, так что, по крайней мере, вы должны добавить «position: relative», чтобы ваш элемент функционировал. Во-вторых, e.offsetX работает только в IE8 и более поздних версиях, поэтому вам, вероятно, следует воздерживаться от его использования в любом случае (хотя я использую их прямо сейчас, но это нужно только для работы в определенных браузерах).

Смежные вопросы