Как динамически изменять минимальные и максимальные значения для слайдера jQuery ui?
поэтому у меня есть страница с ползунком jQuery ui на нем, инициализированным следующим образом:
var min = $("#attrInformation").data("lowest_price"),
max = $("#attrInformation").data("highest_price");
$( "#slider-range" ).slider({
range: true,
min: min,
max: max,
values: [ min, max ],
slide: function( event, ui ) {
var start = ui.values[0],
end = ui.values[1];
$("#startPrice").text(start);
$("#endPrice").text(end);
},
stop: function(event,ui){
var start = ui.values[0],
end = ui.values[1];
refineObject.price_min = start;
refineObject.price_max = end;
refineResults(refineObject);
}
});
и я хочу иметь возможность изменять min, max и значение, для которого два дескриптора находятся на основе результатов вызова ajax. поэтому я попробовал что-то вроде этого:
$.get("ajax.php",options,function(data){
$('.middle_container').html(data);
$('#slider-range').slider( "option", "min", $('.middle_container').find('.start_price').val() );
$('#slider-range').slider( "option", "max", $('.middle_container').find('.end_price').val() );
$('#slider-range').slider("value", $('#slider-range').slider("value"));
});
где мои min и max содержатся в двух скрытых divs с классом start_price
и end_price
. в настоящее время это не работает, он не обновляет максимальную цену и правую ручку слайдера появляется слева вне позиции. есть предложения, как это сделать? я использую php для бэкэнда. код start_price и end_price работает и корректен.
3 ответов
убедится $('.middle_container').find('.start_price').val()
и $('.middle_container').find('.end_price').val()
возвращают правильные значения. Кроме того, чтобы установить значение ползунка, вы должны использовать тот же синтаксис, который используется для установки значений min / max. Также
попробуй такое
$.get("ajax.php",options,function(data){
$('.middle_container').html(data);
$('#slider-range').slider( "option", "min", $('.middle_container').find('.start_price').val() );
$('#slider-range').slider( "option", "max", $('.middle_container').find('.end_price').val() );
$('#slider-range').slider( "option", "value", $('#slider-range').slider("value"));
});
сначала уничтожьте ползунок, который полностью удаляет функциональность ползунка. Это вернет элемент обратно в состояние pre-init.
$("#selector").slider("destroy");
после этого вы можете добавить новые значения в ползунок как,
$("#selector").slider({
range: "max",
min: 0, // min value
max: 200, // max value
step: 0.1,
value: 200, // default value of slider
slide: function(event, ui) {
$("#amount").val(ui.value);
}
});
это работает.
Если вы хотите сделать это при изменении входного значения, вы можете сделать что-то вроде этого.
$('#inputid').focusout(function() {
// slider destroy and create as Shailesh showed
});
Я собирался использовать keyup вместо focus, но в зависимости от внутренних проверок, которые вы делаете, вы можете в конечном итоге перестроить свой слайдер много раз, что не будет преимуществом, поскольку вы не будете использовать его, пока не перейдете от ввода.