Подтвердить что ты не робот

JQuery-UI slider - как отключить ввод с клавиатуры?

в jQuery-UI Клавиши со сдвигом ползунка перемещают ручку ползунка (после того, как ручка была выбрана/нажата), что приятно, но я не хочу, чтобы ползунок обрабатывал клавиатуру (я использую клавиши со стрелками на странице для другого purpouse).

Любые идеи о том, как отключить события клавиатуры для слайдера jquery-ui?

4b9b3361

Ответ 1

Вы можете отвязать событие keydown от дескриптора, чтобы сделать то, что вы хотите, например:

$("#slider").slider(); //create slider
$("#slider .ui-slider-handle").unbind('keydown'); //disable keyboard actions

Здесь вы можете увидеть демо

Ответ 2

Вы также можете автоматизировать описанное выше решение:

$.prototype.slider_old = $.prototype.slider;
$.prototype.slider = function()
{
    var result = $.prototype.slider_old.apply(this, arguments);
    this.find(".ui-slider-handle").unbind("keydown"); // disable keyboard actions
    return result;
}

Просто запустите этот код, прежде чем делать вызовы $(...). slider(), и он должен автоматически удалить событие keydown сразу после запуска слайдера.

Ответ 3

Я бы рекомендовал использовать обратный вызов слайдера create, чтобы отменить keydown следующим образом:

$( "#slider" ).slider({
  create: function() {
    disableKeydown();
  }
});

function disableKeydown() {
  $(".ui-slider-handle").unbind('keydown');
}

В зависимости от контекста, в котором выполняется первый ответ, нет гарантии, что функция unbind будет вызвана после инициализации слайдера. Второй ответ помогает решить эту проблему, но я думаю, что придерживаться документации API, предоставляемой пользовательским интерфейсом jquery, делает этот подход более дружественным, что приводит к меньшей двусмысленности кода.