2011-01-10 14 views
6

Sto cercando una buona risorsa sulla normalizzazione degli eventi sull'oggetto evento. Sto provando a farlo da solo ma continuo a sentirmi mancare qualcosa.Normalizzazione oggetto evento Browser incrociato?

Ecco quello che ho finora, dimmi se ho perso qualcosa.

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

Qualcuno ha visto una completa funzione di normalizzazione? Mi sono perso qualcosa? (Inutile dire che stiamo andando per il W3C modella non IE)

+0

Sei contrario all'uso di jQuery? Questo ci penserebbe per te ... –

+4

@Brad Christie E 'per scopi di apprendimento e preferirei non gonfiare il mio codice solo per la normalizzazione degli eventi – qwertymk

+5

@qwertymk Sono d'accordo. Le persone sono troppo veloci per includere ogni libreria nota all'uomo semplicemente per utilizzare una singola funzione da esso. È davvero triste. – crush

risposta

2

C'è un altro problema con il tuo codice:

e.layerX funziona solo su posizionati elementi, in modo per lo meno è necessario aggiungere un "position: relative" al tuo elemento per funzionare. In secondo luogo e.offsetX funziona correttamente solo in IE8 e successivamente, quindi probabilmente si dovrebbe evitare di utilizzarla in entrambi i casi (anche se io li sto usando in questo momento, ma questo ha solo bisogno di lavorare in browser specifici).