Bootstrap 5 导航栏包含下拉菜单。
下拉菜单有带下划线的热键,如a
、n
、s
、e
:
<div class="btn-group">
<button type="button" class="btn btn-danger dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Action
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#"><u>A</u>ction</a></li>
<li><a class="dropdown-item" href="#">A<u>n</u>other action</a></li>
<li><a class="dropdown-item" href="#"><u>S</u>omething else here</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">S<u>e</u>parated link</a></li>
</ul>
</div>
如果按下键盘上的键,如何激活菜单项?例如,如果下拉菜单已打开,则按 A 应该像单击操作菜单项一样。
jsfiddle:https://jsfiddle.net/b6or2s5e/
左箭头和右箭头已经使用
document.addEventListener("DOMContentLoaded", function () {
document.querySelectorAll('.dropdown').forEach(function (el) {
el.addEventListener('shown.bs.dropdown', function () {
document.addEventListener('keydown', function (e) {
const click = new MouseEvent("click", {
bubbles: true,
cancelable: true,
view: window,
})
if (e.key === "ArrowRight") {
const o = getNextSibling(e.target.closest('.dropdown'), '.dropdown')
if (!o) {
document.querySelector('.dropdown-toggle').dispatchEvent(click)
} else {
o.querySelector('.Xdropdown-toggle').dispatchEvent(click)
}
} else if (e.key === "ArrowLeft") {
const o = getPrevSibling(e.target.closest('.dropdown'), '.dropdown')
if (!o) {
const ar = document.querySelectorAll('.dropdown-toggle')
ar[ar.length - 1].dispatchEvent(click)
} else {
o.querySelector('.dropdown-toggle').dispatchEvent(click)
}
}
}, { once: true })
})
})
})
如何添加热键处理?
以下是更新的代码片段,采用动态方法获取下划线元素,并使用forEach循环遍历下划线元素 节点列表,将窗口
keydown
上的事件与转换为的每个下划线元素的textContent进行比较,然后进行比较。如果匹配,我们将在匹配的元素上运行。toLowerCase()
click()
我相信您问的是是否可以添加控制键和/或alt键,不能 100% 确定您的问题是否在这里,但您可以根据要使用 keydown 控制的内容添加任何条件。只需将逻辑添加到条件中即可。
请参阅下面代码片段中的更多注释...