Существует ли плагин или пример ползунка jQuery, работающего с неравномерно делимыми значениями?

В основном, эта строка:

if not maximum_score_index or **search_list[idx]** > search_list[maximum_score_index]:
    maximum_score_index = **idx**

Можно рассматривать как:

if (this is the first pass) or (element at index > this loop-iteration element):
    keep this index as largest element

Что я рекомендую сделать:

  1. Пройти через код, на листе бумаги и итерации по списку, чтобы увидеть, что код делает
  2. Напишите код в любой IDE, и используйте отладчик, чтобы увидеть, что код делает

Вы ищете индекс самого высокого элемента в списке или значение? Если вы ищете значение, оно может быть простым:

highest = max(search_list)

Вы также можете использовать enumerate, что предоставит вам «свободный» доступ к текущему индексу в цикле: [1112 ]

>>> search_list
[10, 15, 5, 3]
>>> maximum_score_index = None
>>> for idx, value in enumerate(search_list):
...   if not maximum_score_index or search_list[idx] > value:
...     maximum_score_index = idx
... 
>>> maximum_score_index
1
>>> search_list[maximum_score_index]
15
10
задан Tim Saunders 25 March 2009 в 15:48
поделиться

1 ответ

Вы могли сделать это с помощью ползунка jQuery путем сцепления в событие слайда (эффективно переопределяющий его)... Что-то вроде этого:

$(function() {
    var values = [0, 10, 50, 60, 70, 80, 90, 91, 92, 93, 94, 95, 100];
    var slider = $("#slider").slider({
        slide: function(event, ui) {
            var includeLeft = event.keyCode != $.ui.keyCode.RIGHT;
            var includeRight = event.keyCode != $.ui.keyCode.LEFT;
            slider.slider('option', 'value', findNearest(includeLeft, includeRight, ui.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;
    }
});

Должен работать на то, что Вы описываете... Я протестировал его на перетаскивание с мышью и левые/правильные/домашние/клавиши End использование (очевидно, необходимо было бы измениться слева/справа на/вниз, если Вы хотите вертикальный ползунок).

Некоторые примечания:

  • Очевидно, массив значений является любыми шагами, которые Вы хотите в своих целях.
  • Также, очевидно, вышеупомянутый код предполагает, что отделение с идентификатором "ползунка" работает.
  • Это будет, вероятно, работать странно, если Ваши минимальные значения / макс. значения не будут тем же как Вашими минимальными значениями / макс. значениями для ползунка (я предложил бы просто использовать "минуту: значения [0], макс.: значения [values.length - 1]" как Ваши минимальные опции / макс. опции на ползунке и затем необходимо всегда быть в безопасности).
  • Очевидно, эта опция не будет в настоящее время ухудшаться к выпадающему списку, но было бы очень легко сделать..., просто представляют Ваш выбор как нормальный выпадающий список (состояние по умолчанию не упаковывают никакого JavaScript), и затем используйте jQuery, чтобы скрыть выпадающий список и также создать Ваш массив значений на основе опций. Затем Вы могли просто обновить (скрытый) выпадающий список в то же время, что и Вы обновляете ползунок в коде выше, так, чтобы, когда Ваша форма отправляет, правильное значение было выбрано в выпадающем списке.

Надежда, которая помогает.

26
ответ дан 3 December 2019 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: