javascript - 可点击的 li 键盘导航链接
问题描述
我有一个 li 列表,您可以使用键盘箭头导航,它工作正常,但我希望能够使用键盘上的 enter 按钮单击链接。我还没有找到解决方案。
var li = $('li');
var liSelected;
$(window).keydown(function(e) {
if (e.which === 40) {
if (liSelected) {
liSelected.removeClass('selected');
next = liSelected.next();
if (next.length > 0) {
liSelected = next.addClass('selected');
} 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');
}
}
});
li {
color: blue;
}
li.selected {
background: yellow;
color: black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li><a href="#">First Link</a></li>
<li> <a href="#">Second Link</a></li>
<li> <a href="#">Third Link</a></li>
<li> <a href="#">Third Link</a></li>
</ul>
解决方案
回车键的键码为 13。因此,您可以在另一个else if
子句中使用如下代码:
else if (e.which === 13) {
if (liSelected) {
$(liSelected).find('a')[0].click();
}
}
推荐阅读
- docker - 当我使用 Dockerfile 运行 UniTime 时,它会不断产生错误吗?
- php - 使用 jQuery 刷新 php 数据不起作用
- c# - C# & SQL Server 实时 DML 事件
- typescript - 元素隐式具有“任何”类型,因为“字符串”类型的表达式
- material-design - Google Material Ripple 效果不适用于 Sveltejs
- javascript - Firebase:我必须单击“继续”按钮两次才能执行任何操作
- javascript - 具有透明背景和渐变边框的元素
- python - 有没有一种有效的方法可以根据数组中的位置计算 numpy 数组中的值?
- json - 大规模合并基于多个键的 JSON 文件
- ios - iOS 13 中的 UIImagePickerController:苹果放弃导航栏可定制性了吗?