这是我不久前针对这种情况开发的一些代码。我在输入中有一个名为“data-controlled-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
上面的回调函数,在滑动(当用户滑动时)和停止(当用户停止滑动时)事件中使用。看起来是这样的:
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。这对于输入为 3 位值(如 255)时特别有用。
我真的希望这可以帮助您并促进您的学习!有任何问题请留言!在 keyup 事件处理程序的选择器中,您可以指定任何内容,以获取您希望由/可以控制滑块的所有输入。