jQuery UI Slider Максимальное значение Проблема - PullRequest
2 голосов
/ 10 декабря 2010

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

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

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

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', также, похоже, влияет на поведение.

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 10 декабря 2010

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

    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");
});

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

0 голосов
/ 10 декабря 2010

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

вместо

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

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

jQuery("#slider-range-min").slider("option","max", max).slider("value", value);
...