Skip to content

Commit 50efd6e

Browse files
committed
Menu: Ignore mouse events triggered due to page scrolling
Fixes #9356 Closes gh-1806
1 parent 7d992ae commit 50efd6e

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

tests/unit/selectmenu/core.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -251,13 +251,13 @@ $.each( [
251251
wrappers = menu.find( "li.ui-menu-item .ui-menu-item-wrapper" );
252252

253253
button.trigger( "click" );
254-
wrappers.first().simulate( "mouseover" ).trigger( "click" );
254+
wrappers.first().simulate( "mouseover", { clientX: 2, clientY: 2 } ).trigger( "click" );
255255
assert.equal( element[ 0 ].selectedIndex, 0, "First item is selected" );
256256
button.simulate( "keydown", { keyCode: $.ui.keyCode.UP } );
257257
assert.equal( element[ 0 ].selectedIndex, 0, "No looping beyond first item" );
258258

259259
button.trigger( "click" );
260-
wrappers.last().simulate( "mouseover" ).trigger( "click" );
260+
wrappers.last().simulate( "mouseover", { clientX: 3, clientY: 3 } ).trigger( "click" );
261261
assert.equal( element[ 0 ].selectedIndex, wrappers.length - 1, "Last item is selected" );
262262
button.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
263263
assert.equal( element[ 0 ].selectedIndex, wrappers.length - 1, "No looping behind last item" );

tests/unit/selectmenu/events.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ QUnit.test( "focus", function( assert ) {
8989
button.trigger( "click" );
9090
links = menu.find( "li.ui-menu-item" );
9191
optionIndex = 0;
92-
links.eq( optionIndex ).simulate( "mouseover" );
92+
links.eq( optionIndex ).simulate( "mouseover", { clientX: 2, clientY: 2 } );
9393
optionIndex += 1;
94-
links.eq( optionIndex ).simulate( "mouseover" );
94+
links.eq( optionIndex ).simulate( "mouseover", { clientX: 3, clientY: 3 } );
9595

9696
// This tests for unwanted, additional focus event on close
9797
that.element.selectmenu( "close" );

ui/widgets/menu.js

+12
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ return $.widget( "ui.menu", {
6464
// Flag used to prevent firing of the click handler
6565
// as the event bubbles up through nested menus
6666
this.mouseHandled = false;
67+
this.lastMousePosition = { x: null, y: null };
6768
this.element
6869
.uniqueId()
6970
.attr( {
@@ -161,6 +162,17 @@ return $.widget( "ui.menu", {
161162
return;
162163
}
163164

165+
// If the mouse didn't actually move, but the page was scrolled, ignore the event (#9356)
166+
if ( event.clientX === this.lastMousePosition.x &&
167+
event.clientY === this.lastMousePosition.y ) {
168+
return;
169+
}
170+
171+
this.lastMousePosition = {
172+
x: event.clientX,
173+
y: event.clientY
174+
};
175+
164176
var actualTarget = $( event.target ).closest( ".ui-menu-item" ),
165177
target = $( event.currentTarget );
166178

0 commit comments

Comments
 (0)