我试图想出一种方法来创建一个非常基本的自动完成,而没有第三方依赖.到目前为止,我已经用ajax调用填充结果列表,并且在每个li上使用鼠标onclick事件,脚本完成所谓的字段.
我需要实现的是一个基于纯js的上/下/输入键导航系统,经过几个小时的搜索,我放弃了. this fiddle非常完美地解释了我的情况,区别在于它确实需要jQuery.
我宁愿不在这里粘贴任何我自己的代码,因为最后的目标是学习这个过程,但是因为我要链接到jsfiddle,所以我需要这样的小提琴.
小提琴HTML:
小提琴JS:
$(document).ready(function () {
$('#btnDown').click(function () {
var $current = $('#MainMenu ul li.active');
if ($current.next().length > 0) {
$('#MainMenu ul li').removeClass('active');
$current.next().addClass('active');
}
});
$('#btnUp').click(function () {
var $current = $('#MainMenu ul li.active');
if ($current.prev().length > 0) {
$('#MainMenu ul li').removeClass('active');
$current.prev().addClass('active');
}
});
$(window).keyup(function (e) {
var $current = $('#MainMenu ul li.active');
var $next;
if (e.keyCode == 38) {
$next = $current.prev();
} else if (e.keyCode == 40) {
$next = $current.next();
}
if ($next.length > 0) {
$('#MainMenu ul li').removeClass('active');
$next.addClass('active');
}
});
});
非常感谢任何愿意指出我正确方向的人.
最佳答案
事实证明这比我预期的要简单,而且我已经提出了以下代码,这些代码显然可以很好地完成工作.
要考虑的事项是:
>必须在要应用的.focus()的每个元素上指定HTML属性“tabindex”
>要有一个ENTER->提交感觉,你必须在li中定位一个链接元素(仍然,我通过此处未包含的onclick事件实现此目的)
>这适用于一个非常简单的列表结构,到目前为止我还没有使用嵌套下拉菜单进行测试
>注意:这很可能不适合复制/粘贴情况,但据我所知,这种方法是程序性的,并且可以让您开始开发更复杂的解决方案
这是基本的HTML:
function scrollList() {
var list = document.getElementById('list'); // targets the IoUsSibling.firstChild.focus(); } // select the element before the current,and focus it
break;
case 40: // if the DOWN key is pressed
if (document.activeElement == maininput) { first.firstChild.focus(); } // if the currently focused element is the main input --> focus the first