Вот код, который я разработал недавно для этой ситуации. У меня есть атрибут на входе, называемый data-control-by, который установлен в то же значение, что и div, в котором инициализирован ползунок. Например, у меня есть это в моем HTML:
<div id="slider-1" data-controls="slider-1-slider-blah"></div>
<input name="whatever" data-controlled-by="slider-1-slider-blah" />
В моем js я бы сначала инициализировал ползунок так:
$("#slider-1").slider({
min: 0,
max: 20,
value: $("input[data-controlled-by='slider-1-slider-blah']").val(),
slide: sliderUpdateInput,
stop: sliderUpdateInput
});
Обратите внимание на указанную выше функцию обратного вызова sliderUpdateInput
, используемую как в событиях slide (пока пользователь скользит), так и в событиях stop (когда пользователь прекращает скольжение). Вот как это выглядит:
function sliderUpdateInput(e,u) {
var slider = $(u.handle).parent();
var controlled_input = $('input[data-controlled-by="' + slider.attr('data-controls') + '"]');
if( u.value <= slider.slider('option', 'min') )
controlled_input.val('');
else
controlled_input.val(u.value);
}
Затем на входе, который вы хотите обновить, вы добавите обработчик keyup, например:
$('input[name="whatever"]').keyup(function(e) {
var slider = $("div[data-controls='" + $(this).attr('data-controlled-by') + "']");
var slider_min = slider.slider('option', 'min');
var slider_max = slider.slider('option', 'max');
// left or down
if( e.keyCode == 37 || e.keyCode == 40 ) {
if( isNaN( parseInt( $(this).val() ) ) )
$(this).val(slider_min);
if( parseInt( $(this).val() ) != slider_min )
$(this).val( parseInt( $(this).val() ) - 1 );
$(this).select();
}
// right or up
else if( e.keyCode == 39 || e.keyCode == 38 ) {
if( isNaN( parseInt( $(this).val() ) ) )
$(this).val(slider_min);
if( parseInt( $(this).val() ) != slider_max )
$(this).val( parseInt( $(this).val() ) + 1 );
$(this).select();
}
if( !isNaN( parseInt($(this).val()) ) )
slider.slider('value', parseInt( $(this).val() ) );
else
slider.slider('value', slider_min );
});
Обновление: дальнейшее объяснение
Обратите внимание на коды клавиш, которые проверяются здесь для вверх / вправо и вниз / влево. Это значит, что пользователь может просто сдвинуть ползунок на 1 в любом направлении. Это особенно полезно, когда ввод имеет трехзначное значение, например 255.
Я действительно надеюсь, что это поможет вам и подстегнет ваше обучение! Прокомментируйте любые вопросы, пожалуйста! В селекторе обработчика событий keyup вы можете указать все, что получит все ваши входные данные, которыми вы хотите управлять / можете управлять ползунками.