I am not sure how I missed this early in my plugin development, but I
see it now.

For my new hover plugin, I noticed jQuery was extending the event
structure with extra mouse information such as:

   event.pageY and event.pageX

and that this extended event is passed to my show and hide handlers.

Well, to make a story short, after working out my plugin logic for
screen and viewport dimensions, compensating for scrolls, etc, testing
it under IE,  I see that the event pass to me show handler does not
have the extended information.

In other words, in my function callback:

function handleShow(e)
{
   var mX = e.pageX;
   var mY = e.pageY;
   ...
}

Under IE, the mouse X/Y variables are undefined.

To fix it, I had to copy some "fix" method logic in jQuery that checks
and sets the event.pageX/Y properties, like so:

function fixEvent(e)
{
   // Calculate pageX/Y if missing and clientX/Y available
   // note: IE seems to be the only one that needs this because
   //       jQuery will add it for others. Don't know why not
   //       for IE.
   if ( e.pageX == null && e.clientX != null ) {
      var e = document.documentElement, b = document.body;
      e.pageX = e.clientX + (e && e.scrollLeft || b.scrollLeft || 0);
      e.pageY = e.clientY + (e && e.scrollTop || b.scrollTop || 0);
   }
   return e;
}

function handleShow(e)
{
   e = fixEvent(e)
   var mX = e.pageX;
   var mY = e.pageY;
   ...
}

Again, I don't know how I missed this early on because I was testing
IE and FF as I was doing my work.   But in the final analysis,  this
is the behavior I am seeing under IE only.

Why would jQuery not set the extended event info with IE?

Thanks in advance.

--
HLS

Reply via email to