Skip to content
Permalink
Browse files

Spinner: Fixed precision when stepping.

Thanks hughlomas
  • Loading branch information
scottgonzalez committed Aug 13, 2011
1 parent 6c1bf56 commit 257021b1af4f5414fb71ada695d86bd51bb5dc04
Showing with 28 additions and 2 deletions.
  1. +17 −0 tests/unit/spinner/spinner_core.js
  2. +11 −2 ui/jquery.ui.spinner.js
@@ -185,4 +185,21 @@ test( "focus text field when pressing button", function() {
ok( element[ 0 ] === document.activeElement, "focused after" );
});

test( "precision", function() {
expect( 2 );
var element = $( "#spin" ).spinner({
value: .05,
step: .0001
});
element.spinner( "stepUp" );
equal( element.val(), "0.0501", "precision from step" );

element.spinner( "option", {
value: 1.05,
step: 1
});
element.spinner( "stepDown" );
equal( element.val(), "0.05", "precision from value" );
});

})( jQuery );
@@ -228,10 +228,13 @@ $.widget( "ui.spinner", {
this.counter = 1;
}

var newVal = this.value() + step * this._increment( this.counter );
var newVal = this.value() + step * this._increment( this.counter ),
// fix precision from bad JS floating point math
precision = Math.max( this._precision( this.value() ),
this._precision( this.options.step ) );

// clamp the new value
newVal = this._trimValue( newVal );
newVal = this._trimValue( newVal.toFixed( precision ) );

if ( !this.spinning || this._trigger( "spin", event, { value: newVal } ) !== false) {
this._value( newVal );
@@ -245,6 +248,12 @@ $.widget( "ui.spinner", {
1;
},

_precision: function( num ) {
var str = num.toString(),
decimal = str.indexOf( "." );
return decimal === -1 ? 0 : str.length - decimal - 1;
},

_trimValue: function( value ) {
var options = this.options;

0 comments on commit 257021b

Please sign in to comment.
You can’t perform that action at this time.