From 0604e110524c77a4430666c9719942772b8caa86 Mon Sep 17 00:00:00 2001 From: Richard Worth Date: Wed, 17 Mar 2010 17:39:29 +0000 Subject: [PATCH] Slider: fixed change event to be triggered by keyup and value and values option setters. Fixes #5367 - slider change event not triggered by keypress --- tests/unit/slider/slider_events.js | 4 ++-- ui/jquery.ui.slider.js | 12 +++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/tests/unit/slider/slider_events.js b/tests/unit/slider/slider_events.js index dd68a74b6..fb9af8155 100644 --- a/tests/unit/slider/slider_events.js +++ b/tests/unit/slider/slider_events.js @@ -20,7 +20,7 @@ test( "slide", function() { // value (even if same as previous value), via mouse(mouseup) or keyboard(keyup) // or value method/option" test( "change", function() { - expect(7); + expect(8); var handle; // Test mouseup at end of handle slide (mouse) @@ -48,7 +48,7 @@ test( "change", function() { el.find( ".ui-slider-handle" ).eq( 0 ) .simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } ) .simulate( "keypress", { keyCode: $.ui.keyCode.LEFT } ) - .simulate( "keyup", { charCode: $.ui.keyCode.LEFT } ); + .simulate( "keyup", { keyCode: $.ui.keyCode.LEFT } ); reset(); // Test value method diff --git a/ui/jquery.ui.slider.js b/ui/jquery.ui.slider.js index be90cdb81..c392facd7 100644 --- a/ui/jquery.ui.slider.js +++ b/ui/jquery.ui.slider.js @@ -193,9 +193,9 @@ $.widget("ui.slider", $.ui.mouse, { var index = $(this).data("index.ui-slider-handle"); if (self._keySliding) { + self._keySliding = false; self._stop(event, index); self._change(event, index); - self._keySliding = false; $(this).removeClass("ui-state-active"); } @@ -479,6 +479,12 @@ $.widget("ui.slider", $.ui.mouse, { }, _setOption: function(key, value) { + + var i, + valsLength = 0; + if ( jQuery.isArray(this.options.values) ) { + valsLength = this.options.values.length; + }; $.Widget.prototype._setOption.apply(this, arguments); @@ -505,11 +511,15 @@ $.widget("ui.slider", $.ui.mouse, { case 'value': this._animateOff = true; this._refreshValue(); + this._change(null, 0); this._animateOff = false; break; case 'values': this._animateOff = true; this._refreshValue(); + for (i = 0; i < valsLength; i++) { + this._change(null, i); + } this._animateOff = false; break; }