Search code examples
jqueryjquery-uijquery-ui-slider

jquery ui slider - ignore/do not step to increment


Possible Duplicate:
jQuery UI Slider - max value (not end of slider)

I'm using non-linear increments for my ui slider:

 $(function() {
    var trueValues = [5, 10, 20, 50, 100, 150, 165];
    var values =     [10, 20, 30, 40, 60, 90, 100];
    var slider = $("#parkSlider").slider({
        orientation: 'horizontal',
        range: "min",
    value: 40,
        slide: function(event, ui) {
            var includeLeft = event.keyCode != $.ui.keyCode.RIGHT;
            var includeRight = event.keyCode != $.ui.keyCode.LEFT;
            var value = findNearest(includeLeft, includeRight, ui.value);
            slider.slider('value', value);


        $("#amount").val(getRealValue(value));

            return false;
        },

    });
    function findNearest(includeLeft, includeRight, value) {
        var nearest = null;
        var diff = null;
        for (var i = 0; i < values.length; i++) {
            if ((includeLeft && values[i] <= value) || (includeRight && values[i] >= value)) {
                var newDiff = Math.abs(value - values[i]);
                if (diff == null || newDiff < diff) {
                    nearest = values[i];
                    diff = newDiff;
                }
            }
        }
        return nearest;
    }
    function getRealValue(sliderValue) {
        for (var i = 0; i < values.length; i++) {
            if (values[i] >= sliderValue) {
                return trueValues[i];
            }
        }
        return 0;
    }
});

I want to ignore the value at 165, and not step to that increment - so the slider can only max at 150, although 150 is not the max value of the slider.

A graphic may explain better:

slider

where I want the position of the slider handle to stop at the 150 value, and not step to the 165 value. (I know I can set the max of the slider, but this is the wrong behavior, as the slider handle then extends past the 150 tick mark)


Solution

  • In your slider options:

    slide: function(event, ui) {
        if (ui.value > 150) {
            return false;
        }
    }