@@ -45,7 +45,7 @@ $.extend( $.simulate.prototype, {
45
45
}
46
46
} ,
47
47
mouseEvent : function ( type , options ) {
48
- var evt ;
48
+ var evt , eventDoc , doc , body ;
49
49
var e = $ . extend ( {
50
50
bubbles : true ,
51
51
cancelable : ( type !== "mousemove" ) ,
@@ -71,6 +71,30 @@ $.extend( $.simulate.prototype, {
71
71
e . screenX , e . screenY , e . clientX , e . clientY ,
72
72
e . ctrlKey , e . altKey , e . shiftKey , e . metaKey ,
73
73
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
+ }
74
98
} else if ( document . createEventObject ) {
75
99
evt = document . createEventObject ( ) ;
76
100
$ . extend ( evt , e ) ;
0 commit comments