私が構築してきたオートコンプリート機能を備えた検索ボックスがあります。いくつか問題があります。
2つのこと:
オートコンプリート/検索用語のリストを上下に矢印で移動すると、フィルターによって非表示になったものも含まれます。表示されているリスト項目のみをトラバースできるようにするにはどうすればよいですか?
Enter キーを押してリストから項目の 1 つを選択すると、検索ボックス内の単語と一致するため、ドロップダウンがまだ表示されます。
いくつかのコード:
$(document).ready(function() {
$("#dropdown").hide();
$("input").keyup(function() {
if (this.value.length) {
var that = this;
$("#dropdown li").hide().filter(function() {
return $(this).html().toLowerCase().indexOf(that.value.toLowerCase()) !== -1;
}).show();
$("#dropdown").show();
}
else {
$("#dropdown").hide();
}
});
$('li').click(function() {
$('#search').val($(this).text());
$("#dropdown").hide();
});
var li = $('li');
var liSelected;
$('input').keydown(function(e) {
if(e.which === 40) {
if(liSelected) {
liSelected.removeClass('selected');
next = liSelected.next();
if(next.length > 0) {
liSelected = next.addClass('selected');
$('#search').val(liSelected.text());
}
else {
liSelected = li.eq(0).addClass('selected');
}
}
else {
liSelected = li.eq(0).addClass('selected');
}
}
else if(e.which === 38) {
if(liSelected) {
liSelected.removeClass('selected');
next = liSelected.prev();
if(next.length > 0) {
liSelected = next.addClass('selected');
}
else {
liSelected = li.last().addClass('selected');
}
}
else {
liSelected = li.last().addClass('selected');
}
}
else if(e.which === 13) {
$('#search').val(liSelected.text());
$("#dropdown").hide()
$('#search').blur();
}
});
});