@@ -45,7 +45,7 @@ $.extend( $.simulate.prototype, {
4545 }
4646 } ,
4747 mouseEvent : function ( type , options ) {
48- var evt ;
48+ var evt , eventDoc , doc , body ;
4949 var e = $ . extend ( {
5050 bubbles : true ,
5151 cancelable : ( type !== "mousemove" ) ,
@@ -71,6 +71,30 @@ $.extend( $.simulate.prototype, {
7171 e . screenX , e . screenY , e . clientX , e . clientY ,
7272 e . ctrlKey , e . altKey , e . shiftKey , e . metaKey ,
7373 e . button , e . relatedTarget || document . body . parentNode ) ;
74+
75+ // IE 9+ creates events with pageX and pageY set to 0.
76+ // Trying to modify the properties throws an error,
77+ // so we define getters to return the correct values.
78+ if ( evt . pageX === 0 && evt . pageY === 0 && Object . defineProperty ) {
79+ eventDoc = evt . relatedTarget . ownerDocument || document ;
80+ doc = eventDoc . documentElement ;
81+ body = eventDoc . body ;
82+
83+ Object . defineProperty ( evt , "pageX" , {
84+ get : function ( ) {
85+ return e . clientX +
86+ ( doc && doc . scrollLeft || body && body . scrollLeft || 0 ) -
87+ ( doc && doc . clientLeft || body && body . clientLeft || 0 ) ;
88+ }
89+ } ) ;
90+ Object . defineProperty ( evt , "pageY" , {
91+ get : function ( ) {
92+ return e . clientY +
93+ ( doc && doc . scrollTop || body && body . scrollTop || 0 ) -
94+ ( doc && doc . clientTop || body && body . clientTop || 0 ) ;
95+ }
96+ } ) ;
97+ }
7498 } else if ( document . createEventObject ) {
7599 evt = document . createEventObject ( ) ;
76100 $ . extend ( evt , e ) ;
0 commit comments