javascript - 使用向下箭头选择下一个列表项
问题描述
给定一个 div 列表,我需要能够使用向上和向下箭头键在列表中的项目之间导航,将.ag-menu-option-active
类应用于当前选定的项目,并在Enter
按键上触发对当前选定列表项的单击。
我目前能够遍历项目列表,但在向下箭头上,它只注销列表中的第二个项目。如上所述,用户应该能够在列表中上下移动并将活动类应用于当前选定的项目。当用户点击Enter
键时,应该点击相关的列表项。
let columnMenuItems = document.querySelectorAll('.ag-menu-option');
document.addEventListener('keydown', e => {
if (e.key === 'ArrowDown') {
for (let i = 0; i < columnMenuItems.length; i++) {
if (columnMenuItems[i].classList.contains('ag-menu-option-active') === true) {
console.log("MENU OPTION SELECTED: ", columnMenuItems[i + 1])
columnMenuItems[i].click();
break;
}
}
}
});
JSFiddle链接:链接
解决方案
You were missing the +/- when you are calling .click() method; Also to prevent the undefined error you should add columnMenuItems-1 in first for loop.
Code should look like this -
if (e.key === 'ArrowDown') {
for (let i = 0; i < columnMenuItems.length-1; i++) {
if (columnMenuItems[i].classList.contains('ag-menu-option-active') === true) {
console.log("MENU OPTION SELECTED: ", columnMenuItems[i + 1]);
columnMenuItems[i].classList.remove('ag-menu-option-active');
columnMenuItems[i + 1].click();
columnMenuItems[i+1].classList.add('ag-menu-option-active');
break;
}
}
}
if (e.key === 'ArrowUp') {
for (let i = columnMenuItems.length - 1; i > 0; i--) {
//console.log("MENU OPTIONS: ", columnMenuItems[i]);
if (columnMenuItems[i].classList.contains('ag-menu-option-active') === true) {
columnMenuItems[i].classList.remove('ag-menu-option-active');
//if (e.key === 'Enter') {
columnMenuItems[i - 1].click();
columnMenuItems[i-1].classList.add('ag-menu-option-active');
//}
break;
}
}
}
Test it here (jsfiddle)
推荐阅读
- hapijs - 实现 hapi-joi 条件模式
- android - 如何避免admob adview被切断
- r - 从R中的函数内部写入文件
- amazon-web-services - s3上传拆分输出
- c# - .NET Core System.Drawing.Common PrintDocument 在 Linux 上不起作用
- c++ - 安装 BLAS 时遇到问题,以及 CMakeLists 的用途?
- python - 通过SSH从python连接Gitlab部署公钥
- java - 有没有办法使用场景形式测量房间的尺寸?
- javascript - 在 React JS 应用程序中处理通过 HTML 表单提交完成的发布请求
- ios - 触摸手势在 Scrollview(Xcode、Swift)中不起作用