2011-01-10 1 views
6

Szukam dobrego zasobu na normalizację zdarzeń w obiekcie zdarzenia. Próbuję to zrobić sam, ale mam wrażenie, że coś przeoczę.Normalizacja obiektu zdarzenia Cross Browser?

Oto, co mam do tej pory, powiedz mi, czy coś przeoczyłem.

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; 
}; 

Czy ktoś widział pełną funkcję normalizacji? Czy coś ominąłem? (trzeba mówić będziemy o modelu W3C nie IE)

+0

Czy jesteś przeciwny używaniu jQuery? To by się tym zająć dla ciebie ... –

+4

@Brad Christie Jest to do celów edukacyjnych i wolałbym nie nadużywać mojego kodu tylko do normalizacji zdarzeń – qwertymk

+5

@qwertymk Zgadzam się. Ludzie są zbyt szybcy, aby objąć każdą bibliotekę znaną człowiekowi tylko po to, by korzystać z jednej funkcji. To naprawdę smutne. – crush

Odpowiedz

2

Jest jeszcze inny problem z kodem:

e.layerX działa tylko na pozycjonowanych elementów, tak przynajmniej trzeba dodać "position: relative" do twojego elementu do funkcji. Po drugie e.offsetX działa poprawnie tylko w IE8 i później, więc powinieneś raczej powstrzymać się od używania go w dowolny sposób (chociaż używam ich teraz, ale to musi działać tylko w określonych przeglądarkach).