Skip to content

Commit 209443d

Browse files
dominicbarnesscottgonzalez
authored andcommitted
Slider: Create clone of options.values during _create(). Fixed #8892 - Multiple Sliders have Conflict with options.values.
1 parent 9cbd4b4 commit 209443d

File tree

2 files changed

+31
-5
lines changed

2 files changed

+31
-5
lines changed

tests/unit/slider/slider_options.js

+28-3
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,33 @@ test("step", function() {
143143
// ok(false, "missing test - untested code is broken code.");
144144
//});
145145

146-
//test("values", function() {
147-
// ok(false, "missing test - untested code is broken code.");
148-
//});
146+
test("values", function() {
147+
expect( 2 );
148+
149+
// testing multiple ranges on the same page, the object reference to the values
150+
// property is preserved via multiple range elements, so updating options.values
151+
// of 1 slider updates options.values of all the others
152+
var ranges = $([
153+
document.createElement("div"),
154+
document.createElement("div")
155+
]).slider({
156+
range: true,
157+
values: [ 25, 75 ]
158+
});
159+
160+
notStrictEqual(
161+
ranges.eq(0).data("uiSlider").options.values,
162+
ranges.eq(1).data("uiSlider").options.values,
163+
"multiple range sliders should not have a reference to the same options.values array"
164+
);
165+
166+
ranges.eq(0).slider("values", 0, 10);
167+
168+
notEqual(
169+
ranges.eq(0).slider("values", 0),
170+
ranges.eq(1).slider("values", 0),
171+
"the values for multiple sliders should be different"
172+
);
173+
});
149174

150175
})(jQuery);

ui/jquery.ui.slider.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,10 @@ $.widget( "ui.slider", $.ui.mouse, {
6262
if ( o.range === true ) {
6363
if ( !o.values ) {
6464
o.values = [ this._valueMin(), this._valueMin() ];
65-
}
66-
if ( o.values.length && o.values.length !== 2 ) {
65+
} else if ( o.values.length && o.values.length !== 2 ) {
6766
o.values = [ o.values[0], o.values[0] ];
67+
} else if ( $.isArray( o.values ) ) {
68+
o.values = o.values.slice(0);
6869
}
6970
}
7071

0 commit comments

Comments
 (0)