Reputation: 1018
Basically, I have 2 sliders implemented using Jquery. I want to set the value in such a way that, when the first slider is selected say a range ex: 0-36. I want the second slider's max value to be set dynamically to 36. Here is the code. I'm not able to set the value to the second slider pls help.
$(function() {
$( "#slider-range-min" ).slider({
range: "min",
value: 0,
min: 0,
max: 100,
slide: function( event, ui ) {
$( "#greenData" ).val( "0 - " + ui.value );
}
});
$( "#greenData" ).val( "$" + $( "#slider-range-min" ).slider( "value" ) );
});
$(function() {
$( "#slider-range-min-amber" ).slider({
range: "min",
value: 0,
min: 0,
max: 100,
slide: function( event, ui ) {
$( "#amberData" ).val( "0 - " + ui.value );
}
});
$( "#amberData" ).val( "$" + $( "#slider-range-min-amber" ).slider( "value" ) );
});
here is the HTML code:
<tr>
<td align="right"><label for="greenValue"
style="font-family: sans-serif; font-size: small;">
Green</label>
</td>
<td> <div id="slider-range-min"> </div> </td>
<td> <input type="text" id="greenData" style="border: 0; color: green; font-weight: bold;" readonly="readonly" />
</td>
</tr>
<tr>
<td align="right"><label
style="font-family: sans-serif; font-size: small;">
Amber</label>
</td>
<td id="amberTdId"> <div id="slider-range-min-amber"> </div> </td>
<td> <input type="text" id="amberData" style="border: 0; color: #FF7E00; font-weight: bold;" readonly="readonly" /> </td>
</tr>
When I select the green slider's range from 0-36 the value 36 should be set to the slider 2. ie,.. the second sliders range should be from min value:0 and max value: 36
How do i go abt it. Thanks in advance.
Upvotes: 1
Views: 601
Reputation: 1559
Simple answer would be to add the following after your $('#greenData').val('0 - ' + ui.value);
line:
$('#slider-range-min-amber').slider('option', 'max', ui.value);
$('#amberData').val('0 - ' + ui.value);
But re-querying the DOM like that is not good for performance. It's better to cache your jQuery objects and re-use them. A more efficient solution would be something like this:
$(function() {
var green = $('#slider-range-min'),
amber = $('#slider-range-min-amber'),
greenData = $('#greenData'),
amberData = $('#amberData'),
opts = {
range: 'min',
value: 0,
min: 0,
max: 100
};
greenData.val('$' + opts.value);
green.slider(opts).slider('option', 'slide', function(e, ui) {
greenData.val(opts.min + ' - ' + ui.value);
// this is the bit that updates the
// max value of the second slider
amber.slider('option', 'max', ui.value);
amberData.val(opts.min + ' - ' + ui.value);
});
amberData.val('$' + opts.value);
amber.slider(opts).slider('option', 'slide', function(e, ui) {
amberData.val(opts.min + ' - ' + ui.value);
});
});
Upvotes: 2
Reputation: 1803
try this code:
$(function() {
$( "#slider-range-min-amber" ).slider({
range: "min",
value: 0,
min: 0,
max: 100,
slide: function( event, ui ) {
$( "#amberData" ).val( "0 - " + ui.value );
}
});
$( "#amberData" ).val( "$" + $( "#slider-range-min-amber" ).slider( "value" ) );
});
$(function() {
$( "#slider-range-min" ).slider({
range: "min",
value: 0,
min: 0,
max: 100,
slide: function( event, ui ) {
$( "#greenData" ).val( "0 - " + ui.value );
var value = ui.value;
var max = ui.value;
$( "#slider-range-min-amber" ).slider("option","max",max).slider("value",value);
$( "#amberData" ).val( "0 - " + ui.value );
}
});
$( "#greenData" ).val( "$" + $( "#slider-range-min" ).slider( "value" ) );
});
Or see my fiddle: http://jsfiddle.net/QPnxf/1/
Upvotes: 3