Slider: Fixed max value miscalculation

Fixes #12852
Closes gh-1664

(cherry picked from commit a1905e2c5e)
This commit is contained in:
Mukul Hase 2016-02-12 00:59:54 +05:30 committed by Scott González
parent eb6d623589
commit 622959b011
2 changed files with 27 additions and 5 deletions

View File

@ -40,7 +40,7 @@ test( "disabled", function(){
}); });
test( "max", function() { test( "max", function() {
expect( 5 ); expect( 7 );
element = $( "<div></div>" ); element = $( "<div></div>" );
options = { options = {
@ -54,7 +54,7 @@ test( "max", function() {
element.slider( options ); element.slider( options );
ok( element.slider( "option", "value" ) === options.value, "value option is not contained by max" ); ok( element.slider( "option", "value" ) === options.value, "value option is not contained by max" );
ok( element.slider( "value" ) === options.max, "value method is contained by max" ); ok( element.slider( "value" ) === options.max, "value method is contained by max" );
options = { options = {
max: 9, max: 9,
min: 1, min: 1,
@ -65,7 +65,7 @@ test( "max", function() {
element.slider( options ); element.slider( options );
ok( element.slider( "value" ) === 7, "value method is within max, edge Case" ); ok( element.slider( "value" ) === 7, "value method is within max, edge Case" );
options.step = 2; options.step = 2;
element.slider( options ); element.slider( options );
@ -84,7 +84,24 @@ test( "max", function() {
ok( element.slider( "value" ) === options.max, "value method will max, step is changed and step is float" ); ok( element.slider( "value" ) === options.max, "value method will max, step is changed and step is float" );
element.slider( "destroy" ); element.slider( "destroy" );
}); options = {
max: 10.75,
min: 1.22,
orientation: "horizontal",
step: 0.01,
value: 10.75
};
element.slider( options );
ok( element.slider( "value" ) === options.max, "value method will max, step is changed, step is float and max is float" );
element.slider( "destroy" );
options.max = 10.749999999;
element.slider( options );
ok( element.slider( "value" ) === 10.74, "value method will max, step is changed, step is float, max is float and not divisible" );
element.slider( "destroy" );
} );
test( "min", function() { test( "min", function() {
expect( 2 ); expect( 2 );

View File

@ -552,8 +552,13 @@ return $.widget( "ui.slider", $.ui.mouse, {
var max = this.options.max, var max = this.options.max,
min = this._valueMin(), min = this._valueMin(),
step = this.options.step, step = this.options.step,
aboveMin = Math.floor( ( +( max - min ).toFixed( this._precision() ) ) / step ) * step; aboveMin = Math.round( ( max - min ) / step ) * step;
max = aboveMin + min; max = aboveMin + min;
if ( max > this.options.max ) {
//If max is not divisible by step, rounding off may increase its value
max -= step;
}
this.max = parseFloat( max.toFixed( this._precision() ) ); this.max = parseFloat( max.toFixed( this._precision() ) );
}, },