jQuery/js处理';双焦点';使用光标和事件

jQuery/js处理';双焦点';使用光标和事件,jquery,cursor,keypress,Jquery,Cursor,Keypress,我正在为菜单启用键盘导航。我在特定情况下遇到了一个问题: <ul> <li><a href="" class="link1">link</a></li> <li><a href="" class="link2">link</a></li> <li><a href="" class="link3">link</a></li&g

我正在为菜单启用键盘导航。我在特定情况下遇到了一个问题:

<ul>
    <li><a href="" class="link1">link</a></li>
    <li><a href="" class="link2">link</a></li>
    <li><a href="" class="link3">link</a></li>
</ul>
})

发生了什么:

我正在捕捉箭头键以在菜单之间导航。除非光标位于一个链接的第一个字符之前,并且我按下了后退箭头,否则这是有效的

我认为发生的是光标移动,然后按键被捕捉。由于光标移动到上一个锚定标记中,因此会触发焦点。但因为我也在捕捉按键并分配焦点,所以无论我的焦点事件是什么,都会被调用两次

有没有办法绕过这个问题

更新:

下面是一些示例代码,可以尝试了解正在发生的事情

HTML:

请注意,您可以向前和向后调整到每个链接

现在,点击第五个链接并按下后退箭头。它将跳转到链接3。再按一下它,它就会转到链接1

我认为原因如上所述……我的脚本应用焦点,但将光标移动到上一个锚标记中的行为也是如此。这两种情况都发生在你击中后箭头的时候

您可以使用插件检查光标是否在第一个字符之前,并将该情况作为边缘大小写处理。

解决方案:


我本应该早点想到这一点,但最终的解决办法是将“preventDefault()”附加到按键事件。关键是首先检测按键,然后只在您要查找的特定按键上设置默认值(否则会丢失网页上的键盘功能)

你为什么不想使用浏览器内置的键盘导航?@sean tabbing仍能正常工作。不过,箭头键不利于在下拉菜单中的链接之间进行良好的导航(我省略了所有额外的标记以表明这一点)。
$('ul').keypress(function (eh){
    var keyPressed = eh.keyCode;
    if (keyPressed=='37'){
        $currentFocusedLink.closest('li').prev('li:first').find('a:first').focus()
<div class="testNav">
      <a href="">TEST LINK 1</a>
      <a href="">TEST LINK 2</a>
      <a href="">TEST LINK 3</a>
      <a href="">TEST LINK 4</a>
      <a href="">TEST LINK 5</a>
</div>
$('.testNav')
    .find('a')
        .focus(function(){
             $activeLink = $(this);      
        })
        .end()
    .keypress(function (eh){
        var keyPressed = eh.keyCode;
        if (keyPressed=='37'){
            $activeLink.prev('a').focus()
        };
     });