Event Normalization in jQuery 1.1.3
A loooong time ago, I wrote a bunch of event normalization code as a plugin to jQuery. In essence, the goal was the get events as close as possible to the DOM specification while retaining a sane file-size and backwards compatibility with existing code.
I wanted to add support for:
relatedTarget
, which, on mouse movement, returns the element that the mouse was previously on when moving onto or off of an elementwhich
for key events, which would return a normalized keyCodemetaKey
, which would return theApple
key on OSX, and thectrl
key in Windows (allowing stuff likeapple-B
to render something bold in OSX, butctrl-B
to do the same in Windows... the expected behavior)- And a biggie:
which
support for buttons (1 for left-click, 2 for middle-click, and 3 for right-click).
I originally had some more grandiose plans, like supporting offsetX
across browsers and getting keyCode
to be the same cross-browser on keypresses, but those ended up either requiring unacceptable dependencies or requiring lots of messy code to get working.
Today, jQuery merged relatedTarget
, which
(for keys and buttons), and metaKey
into the core jQuery distribution, and we did it without adding a single byte to the current 20k cap on jQuery's filesize. We also added a whole slew of new features, without sacrificing our current cap. I say it's incredible, and thanks to the hard, tireless work of the jQuery Core Team. The speed improvements, which are the work of jQuery's maintainer, John Resig, also happened, sort of unexpectedly, without busting the 20k.
Amazing.
Back to the event normalization, I think you'll find that between the old normalization that was present since the early days (event.target
and event.pageX/pageY
), and this new code, you'll be able to do all sorts of neat tricks without having to put much thought into browser compatibility issues.
Enjoy!