Проблема с максимальным значением слайдера jQuery ui

Я новичок в jQuery-ui, и у меня возникла проблема с инициализацией jquery-ui-slider. Я пытаюсь создать слайдер с минимальным и максимальным значениями.

Ползунок должен иметь только один дескриптор, который должен быть инициализирован некоторым значением, но каким-то образом он всегда установлен на максимальное значение. Однако у меня есть элемент диапазона, в котором я пишу фактическое значение ползунка, и значение в этом диапазоне инициализируется правильно.

Я запускаю ползунок следующим образом:

jQuery("#slider-range-min").slider({
    range: "min",
    min: 3,
    slide: function( event, ui ) {
        jQuery("#length").text(ui.value);
    }
});

Диалог, в который встроен ползунок, запускается следующим образом:

jQuery(".config_length").live('dblclick',function() {
    jQuery("#length-form").find("input[name=referer]").val(this.id);
    var max = jQuery(this).find("input[name$='_param']").val();
    var value = jQuery(this).find("input[name$='_value']").val();
    jQuery("#slider-range-min").slider("option","max", max);
    jQuery("#slider-range-min").slider("option","value", value);
    jQuery("#length").text(value);
    jQuery("#length-form").dialog("open");
});

'# slider-range-min' - это идентификатор ползунка, '# length-form' - это идентификатор диалога, а '#length' - идентификатор диапазона. Обе переменные max и value имеют правильные значения (контролируются Firebug).

Если, например, для параметра max установлено значение 250, а значение value - 100, значение в диапазоне будет равно 100, дескриптор ползунка будет в крайнем правом положении (которое должно быть 250?), Но как только когда я нажимаю на ручку, значение диапазона изменится на 249.

Редактировать

Проблема возникает только тогда, когда значение «max» больше 100 (что является значением max по умолчанию). Более того, кажется, что порядок, в котором я устанавливаю «max» и «value», также влияет на поведение.

Что я делаю неправильно?


person Pit    schedule 10.12.2010    source источник


Ответы (2)


Я нашел способ заставить его работать, но я не думаю, что это нужно делать таким образом:

    jQuery("config_length").live('dblclick',function() {
    jQuery("#length-form").find("input[name=referer]").val(this.id);
    var max = jQuery(this).find("input[name$='_param']").val();
    var value = jQuery(this).find("input[name$='_value']").val();
    if (max > 100) {
        jQuery("#slider-range-min").slider("option", "value", value).slider("option","max", max);
    } else {
        jQuery("#slider-range-min").slider("option","max", max).slider("option", "value", value);
    }
    jQuery("#length").text(value);
    jQuery("#length-form").dialog("open");
});

Несмотря на то, что сейчас это работает, я хотел бы знать, нет ли «правильного» способа сделать это.

person Pit    schedule 10.12.2010

Фактически, когда вы передаете объект в ползунок метода «option» (второй фрагмент кода), он перезаписывает существующие значения, что означает, что все ваши начальные параметры являются нулевыми, если они не повторяются в новом объекте параметров. Кроме того, что параметр «значение» семантически связан с начальным значением, если вы изменяете значение времени выполнения, вы должны использовать метод «значение».

вместо

jQuery("#slider-range-min").slider("option",{
        max: max,
        value: value
    })

использовать

jQuery("#slider-range-min").slider("option","max", max).slider("value", value);
person Jura Khrapunov    schedule 10.12.2010
comment
Спасибо, но это не помогает. Я даже переместил диалоговое окно (открыть) в конец и вставил предупреждение непосредственно перед открытием (что дает правильное значение!). Однако если я изменю значение ползунка, отправьте диалоговое окно и снова открою его, новое значение отображается правильно в слайдер. Кажется, что значение 'value' каким-то образом кешируется в JavaScript. - person Pit; 10.12.2010