スタイリング上の理由から、選択フォーム要素として ul リストを使用できるようにしたいと考えています。
私は自分のコード (この jsfiddle には含まれていません) を非表示の入力に入力することができますが、これまでのところはうまくいっています。使用されている。
以前の質問で、キーボード コントロールに問題がありました。それらは現在修正されています。参照:キーボードの矢印の上下の自動スクロール
残っている問題は、キーボード ボタンが押されたときにマウスが無視されないことです。これにより、「ホバー効果」が最初にキーボード入力をリッスンしますが、すぐにマウスに移動して、このliアイテムを選択済みとして選択します。
これは私の jsfiddle の例で見ることができます: http://jsfiddle.net/JVDXT/3/
私のJavaScriptコード:
// scrollTo plugin
$.fn.scrollTo = function( target, options, callback ){
if(typeof options == 'function' && arguments.length == 2){ callback = options; options = target; }
var settings = $.extend({
scrollTarget : target,
offsetTop : 100,
duration : 0,
easing : 'linear'
}, options);
return this.each(function(){
var scrollPane = $(this);
var scrollTarget = (typeof settings.scrollTarget == "number") ? settings.scrollTarget : $(settings.scrollTarget);
var scrollY = (typeof scrollTarget == "number") ? scrollTarget : scrollTarget.offset().top + scrollPane.scrollTop() - parseInt(settings.offsetTop);
scrollPane.animate({scrollTop : scrollY }, parseInt(settings.duration), settings.easing, function(){
if (typeof callback == 'function') { callback.call(this); }
});
});
}
//My code
//The function that is listing the the mouse
jQuery(".btn-group .dropdown-menu li").mouseover(function() {
console.log('mousie')
jQuery(".btn-group .dropdown-menu li").removeClass('selected');
jQuery(this).addClass('selected');
})
//What to do when the keyboard is pressed
jQuery(".btn-group").keydown(function(e) {
if (e.keyCode == 38) { // up
console.log('keyup pressed');
var selected = jQuery('.selected');
jQuery(".btn-group .dropdown-menu li").removeClass('selected');
if (selected.prev().length == 0) {
selected.siblings().last().addClass('selected');
} else {
selected.prev().addClass('selected');
jQuery('.btn-group .dropdown-menu').scrollTo('.selected');
}
}
if (e.keyCode == 40) { // down
console.log('keydown');
var selected = jQuery('.selected');
jQuery(".btn-group .dropdown-menu li").removeClass('selected');
if (selected.next().length == 0) {
selected.siblings().first().addClass('selected');
} else {
selected.next().addClass('selected');
jQuery('.btn-group .dropdown-menu').scrollTo('.selected');
}
}
});
それで、キーボードのボタンが押されたときにマウスを無視する方法を誰かに教えてもらえますが、ユーザーが再び触れたときにマウスにリストします。デフォルトの select 入力フォーム フィールドと同様です。
アップデート
これが新しいjsfiddleです。