]> source.dussan.org Git - jquery-ui.git/commitdiff
Slider: Fixed max value miscalculation 1716/head
authorMukul Hase <mukulhase@gmail.com>
Thu, 11 Feb 2016 19:29:54 +0000 (00:59 +0530)
committerScott González <scott.gonzalez@gmail.com>
Thu, 9 Jun 2016 21:44:32 +0000 (17:44 -0400)
Fixes #12852
Closes gh-1664

(cherry picked from commit a1905e2c5ed6e61e6a7206e005de9dda4f7135d0)

tests/unit/slider/slider_options.js
ui/slider.js

index 2badcc566f90f23dc515dc563fc8bcc6f62382f4..7f65916842e383a19e2cefb34e3047db0a9a339b 100644 (file)
@@ -40,7 +40,7 @@ test( "disabled", function(){
 });
 
 test( "max", function() {
-       expect( 5 );
+       expect( 7 );
        element = $( "<div></div>" );
 
        options = {
@@ -54,7 +54,7 @@ test( "max", function() {
        element.slider( options );
        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" );
-       
+
        options = {
                max: 9,
                min: 1,
@@ -65,7 +65,7 @@ test( "max", function() {
 
        element.slider( options );
        ok( element.slider( "value" ) === 7, "value method is within max, edge Case" );
-       
+
        options.step = 2;
 
        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" );
        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() {
        expect( 2 );
index 24ab6e1672afb8f66bfddaaa5f5a3d80db5f8547..5ee9c8236ddb23ffad7c37cdb4f5787ad43ec6cd 100644 (file)
@@ -552,8 +552,13 @@ return $.widget( "ui.slider", $.ui.mouse, {
                var max = this.options.max,
                        min = this._valueMin(),
                        step = this.options.step,
-                       aboveMin = Math.floor( ( +( max - min ).toFixed( this._precision() ) ) / step ) * step;
+                       aboveMin = Math.round( ( max - min ) / step ) * step;
                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() ) );
        },