我有一个搜索框,它具有我一直在构建的自动完成功能。我有几个问题。
两件事情:
在自动完成/搜索词列表中上下箭头时,它包括那些被过滤器隐藏的词。如何确保只能遍历可见的列表项?
当我按回车键从列表中选择一项时,下拉菜单仍然存在,因为它与搜索框中的单词匹配。
一些代码:
$(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();
}
});
});