Skip to content

Commit 32f471c

Browse files
cgackarschmitz
authored andcommitted
Slider: change event is too greedy with mouse drag
Fixes jquery-archivegh-7649 Closes jquery-archivegh-7653
1 parent 3efe6fe commit 32f471c

File tree

4 files changed

+31
-12
lines changed

4 files changed

+31
-12
lines changed

js/widgets/forms/slider.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,7 @@ $.widget( "mobile.slider", $.extend( {
514514

515515
// update control"s value
516516
if ( isInput ) {
517-
valueChanged = control.val() !== newval;
517+
valueChanged = parseFloat( control.val() ) !== newval;
518518
control.val( newval );
519519
} else {
520520
valueChanged = control[ 0 ].selectedIndex !== newval;

tests/unit/slider/index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,10 @@
132132
<input type="range" name="disable-input-test" id="disable-input-test" value="17" min="0" max="100" />
133133
</label>
134134

135+
<div data-role="fieldcontain">
136+
<input type="range" name="slider-change-event" id="slider-change-event" value="2" min="0" max="4" step="1" />
137+
</div>
138+
135139
</div>
136140

137141
<div id="enhancetest">

tests/unit/slider/slider_core.js

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -95,17 +95,6 @@
9595
testDisabled( "After setting option 'disabled' to true a second time: ", true );
9696
});
9797

98-
test( "refresh is triggered on mouseup", function() {
99-
expect( 1 );
100-
var slider = $( "#mouseup-refresh" );
101-
102-
slider.val( parseInt(slider.val(), 10) + 10 );
103-
slider.change(function() {
104-
ok( true, "slider changed" );
105-
});
106-
slider.trigger( "mouseup" );
107-
});
108-
10998
test( "slider tooltip & button values should match after input value changes", function() {
11099
var slider = $("#tooltip-test-both");
111100
var sliderHandle = slider.siblings(".ui-slider-track").children(".ui-slider-handle");

tests/unit/slider/slider_events.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,32 @@
459459
], 500);
460460
});
461461

462+
test( "mouse move only triggers the change event when the value changes", function() {
463+
var control = $( "#slider-change-event" ),
464+
widget = control.data( "mobile-slider" ),
465+
slider = widget.slider,
466+
handle = widget.handle,
467+
changeCount = 0,
468+
actualChanges = 0,
469+
changeFunc = function( e ) {
470+
++changeCount;
471+
if ( control.val() !== currentValue ) {
472+
++actualChanges;
473+
}
474+
},
475+
offset = handle.offset(),
476+
currentValue = control.val();
477+
478+
control.bind( "change", changeFunc );
479+
480+
slider.trigger( createEvent( "mousedown", handle[ 0 ], offset.left + 10, offset.top + 10 ) );
481+
slider.trigger( createEvent( "mouseup", handle[ 0 ], offset.left + 10, offset.top + 10 ) );
482+
483+
control.unbind( "change", changeFunc );
484+
485+
strictEqual( actualChanges, changeCount, "change events match actual changes in value" );
486+
});
487+
462488
// NOTE this test isn't run because the event data isn't easily accessible
463489
// and with the advent of the widget _on method we are actually testing the
464490
// widget from UI which has it's own test suite for these sorts of things

0 commit comments

Comments
 (0)