Как динамически изменять минимальные и максимальные значения для слайдера 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, но в зависимости от внутренних проверок, которые вы делаете, вы можете в конечном итоге перестроить свой слайдер много раз, что не будет преимуществом, поскольку вы не будете использовать его, пока не перейдете от ввода.