【发布时间】:2013-01-22 17:43:42
【问题描述】:
首先,我想只使用原生 JavaScript 来完成这项任务。
假设我要制作一个自定义下拉菜单,HTML 代码看起来像这样。
<div class="dropdown">
<span class="dropdown-label" style="display:block">Select a thing</span>
<ul class="dropdownItemContainer">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
<li>Item 6</li>
</ul>
</div>
在 CSS 文件中,我有类似的东西:
ul.dropdownItemContainer li:hover {
background-color: #FF0000;
}
是的,确实没有下拉行为,但实际上这不是讨论的重点。问题是我想不出一种体面的方法来为此下拉菜单启用键盘控制。期望的结果如下:我按下向下键,第一个选项被突出显示;我再次按下它,第二个选项被突出显示,依此类推。
此时我看到的唯一选择(刚开始学习 JS)是获取所有ul 的孩子,将它们粘贴到一个数组中,并通过 JS 方法以适当的方式为标签分配背景颜色每次按下向下键时的方式。
另一方面,我仍然有鼠标控制的 CSS 中描述的 :hover 行为。有模拟悬停的聪明方法吗?
【问题讨论】:
-
键盘导航大量使用
:focus。 -
@AlessandroVendruscolo 是的,但除了 或常规控制元素之外,我真的无法专注于任何事情,可以吗? :)
-
我只想到了 jQuery 解决方案 :(
-
添加
tabindex属性,或在lis 内放置锚点——参见this answer -
@AlessandroVendruscolo 基于 tabindex 的焦点事件不是很可靠。例如。
:focus伪类不会在某些浏览器中触发。
标签: javascript hover onkeydown