この状況のために少し前に開発したコードを次に示します。入力に、スライダーが初期化される div と同じ値に設定された「data-control-by」という属性があります。たとえば、私はこれを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);
}
次に、更新する入力に、次のようにキーアップ ハンドラーを追加します。
$('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 のような 3 桁の値の場合に特に便利です。
これがあなたを助け、あなたの学習に拍車をかけることを本当に願っています!質問があればコメントしてください!keyup イベント ハンドラーのセレクターでは、スライダーで制御したい/制御できるすべての入力を取得するものを指定できます。