为方便起见,这是一个学校的工作,我在输入栏中输入文字,然后从数据库中得到与用户所写字母相同的选项。它有简单的名称数据库附加。
我收到AJAX响应,并将其转化为名称数组.我在搜索字段下面有ul元素,来自响应的名称被我填充为这个ul列表中的li项。这一切工作,我需要的是功能,当按上下方向键从输入字段移动到这些列表项目。
在我的第一次尝试中,我选择了datalist,而不是ul,我用选项元素填充datalist,这工作很好,因为我可以从输入移动到datalist选项。然而,再往后我需要将事件监听器附加到选项上,这是不可能的。因此,我就去了ul li版本.我似乎无法解决如何能从输入元素切换到li项目。
我已经尝试过了。
我在输入栏上安装了事件监听器keydown来检查是否按下了DownArrow。这个方法有效。然后我尝试了以下方法(names是ul的id)。
let list = document.getElementById('names');
list.firstChild.focus();
list.firstChild.select();
在这里,我得到了 "list.firstChild.select is not a function "的错误信息,我被卡住了。
判断你的代码,你得到的错误的原因 list.firstChild.select is not a function
是因为你试图使用 focus()
方法的元素上。基本上,你可以在一个 <input />
元素,但它无法在 <li>
项。
根据 DOM第2级只有以下元素有 focus
方法。
为了让元素.focus()在列表项上工作(默认情况下不工作),你必须给列表项添加tabindex属性。
例如
listitem.setAttribute('tabindex',1)。