Skip to content

Commit

Permalink
Spinner: Ignore mousewheel events when not focused
Browse files Browse the repository at this point in the history
Fixes #15139
Closes gh-1794
  • Loading branch information
scottgonzalez committed Feb 21, 2017
1 parent 162377f commit a3b9129
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 10 deletions.
34 changes: 25 additions & 9 deletions tests/unit/spinner/core.js
Original file line number Diff line number Diff line change
Expand Up @@ -162,23 +162,39 @@ QUnit.test( "mouse click on up button, increases value not greater than max", fu
} );

QUnit.test( "mousewheel on input", function( assert ) {
assert.expect( 4 );
var ready = assert.async();
assert.expect( 5 );

var element = $( "#spin" ).val( 0 ).spinner( {
step: 2
} );

element.trigger( "mousewheel" );
assert.equal( element.val(), 0, "mousewheel event without delta does not change value" );
element.simulate( "focus" );
setTimeout( step1 );

element.trigger( "mousewheel", 1 );
assert.equal( element.val(), 2 );
function step1() {
element.trigger( "mousewheel" );
assert.equal( element.val(), 0, "mousewheel event without delta does not change value" );

element.trigger( "mousewheel", -0.2 );
assert.equal( element.val(), 0 );
element.trigger( "mousewheel", 1 );
assert.equal( element.val(), 2, "delta 1" );

element.trigger( "mousewheel", -0.2 );
assert.equal( element.val(), 0, "delta -0.2" );

element.trigger( "mousewheel", -15 );
assert.equal( element.val(), -2, "delta -15" );

element.trigger( "mousewheel", -15 );
assert.equal( element.val(), -2 );
element.simulate( "blur" );
setTimeout( step2 );
}

function step2() {
element.trigger( "mousewheel", 1 );
assert.equal( element.val(), -2, "mousewheel when not focused" );

ready();
}
} );

QUnit.test( "reading HTML5 attributes", function( assert ) {
Expand Down
6 changes: 5 additions & 1 deletion ui/widgets/spinner.js
Original file line number Diff line number Diff line change
Expand Up @@ -140,9 +140,13 @@ $.widget( "ui.spinner", {
}
},
mousewheel: function( event, delta ) {
if ( !delta ) {
var activeElement = $.ui.safeActiveElement( this.document[ 0 ] );
var isActive = this.element[ 0 ] === activeElement;

if ( !isActive || !delta ) {
return;
}

if ( !this.spinning && !this._start( event ) ) {
return false;
}
Expand Down

0 comments on commit a3b9129

Please sign in to comment.