【问题标题】:Javascript - How to change focus on links in a list with keyboard arrow keysJavascript - 如何使用键盘箭头键更改列表中链接的焦点
【发布时间】:2014-02-10 10:06:02
【问题描述】:

当链接未包含在其他元素中时,我可以更改焦点。

这行得通:

HTML

<a id="first" href="#" class='move'>Link</a>
<a href="#" class='move'>Link</a>
<a href="#" class='move'>Link</a>

JS(使用 jQuery)

$(document).keydown(
    function(e)
    {    
        // Down key
        if (e.keyCode == 40) {      
            $(".move:focus").next().focus();       
        }

        // Up key
        if (e.keyCode == 38) {      
            $(".move:focus").prev().focus();       
        }
    }
);

Demo Fiddle

但是,例如,当链接在列表中时,我如何实现相同的目标?像这样

<ul>
    <li>
        <a id="first" href="#" class='move'>Link</a>
    </li>
    <li>
        <a href="#" class='move'>Link</a>
    </li>
    <li>
        <a href="#" class='move'>Link</a>
    </li>
</ul> 

【问题讨论】:

    标签: javascript jquery html navigation focus


    【解决方案1】:

    您可以使用 .closest() 找到父元素,然后使用 .next() 获取下一个 li,然后使用 .find() 获取下一个 .move

        if (e.keyCode == 40) {      
            $(".move:focus").closest('li').next().find('a.move').focus();   
        }
    
        // Up key
        if (e.keyCode == 38) {      
            $(".move:focus").closest('li').prev().find('a.move').focus();   
        }
    

    DEMO

    【讨论】:

      【解决方案2】:
      if (e.keyCode == 40) {      
        $(".move:focus").parent().next().find('a').focus();   
      }
      if (e.keyCode == 38) {      
        $(".move:focus").parent().prev().find('a').focus();   
      }
      

      【讨论】:

        【解决方案3】:

        如果您碰巧希望您的焦点在到达列表末尾时循环,您可以执行以下操作:

        var $li = $('li'),
        
        $move = $(".move").click(function () {
            this.focus();
        });
        
        $(document).keydown(function(e) {
            if (e.keyCode == 40 || e.keyCode == 38) {
                var inc = e.keyCode == 40 ? 1 : -1,
                    move = $move.filter(":focus").parent('li').index() + inc;
                $li.eq(move % $li.length).find('.move').focus();
            }
        });
        
        $move.filter(':first').focus();
        

        演示:http://jsfiddle.net/WWQPR/5/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-24
          相关资源
          最近更新 更多