html - 如何使简单的导航菜单键盘可访问?

标签 html css accessibility

我有一个简单的 ul 菜单

<ul role="menu" aria-label="menu">
    <li role="menuitem" tabindex="0" ><a target="_blank" href="http://www.google.com">item 1</a></li>
    <li role="menuitem" tabindex="0" ><a target="_blank" href="http://www.google.com">item 2</a></li>
    <li role="menuitem" tabindex="0" ><a target="_blank" href="http://www.google.com">item 3</a></li>
    <li role="menuitem" tabindex="0" ><a target="_blank" href="http://www.google.com">item 4</a></li>
</ul>

我可以使用 tab 向上导航和向下 tab + shift 导航。但是如何使用键盘箭头访问它以便用户可以上下导航?

最佳答案

这里是您的代码的工作示例: http://plnkr.co/edit/UeUEIvO4hKzsdlhSTdNg?p=preview

<body>
  <ul role="menu" aria-label="menu">
      <li role="menuitem" tabindex="0" ><a target="_blank" href="http://www.google.com">item 1</a></li>
      <li role="menuitem" tabindex="0" ><a target="_blank" href="http://www.google.com">item 2</a></li>
      <li role="menuitem" tabindex="0" ><a target="_blank" href="http://www.google.com">item 3</a></li>
      <li role="menuitem" tabindex="0" ><a target="_blank" href="http://www.google.com">item 4</a></li>
  </ul>
</body>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<script>
$(document).keydown(
    function(e)
    {    
        //38 is the keycode for arrow up
        if (e.keyCode == 38) {  
          //check if a li is focused, if not it focus the first one    
          if($('li').is(':focus')){
            $("li:focus").next().focus();
          }
          else{
            $("li:first-child").focus();
          }

        }
        else if (e.keyCode == 40) {      
          if($('li').is(':focus')){
            $("li:focus").prev().focus();
          }
          else{
            $("li:first-child").focus();
          }
        }
    }
);
</script>

有一个不同键码的列表:https://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

关于html - 如何使简单的导航菜单键盘可访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41039045/

相关文章:

javascript - jQuery - aria-controls vs data attributes to identify/select DOM element - 哪个是首选方法?

javascript - NVDA 在动态更新后读取 aria-hidden 内容

javascript - 如何使用 jQuery 获取包含在 td 中的 HTML?

javascript - 如何将三个文本表达式均匀对齐并垂直居中在一行中

javascript - 将我的 Jquery 幻灯片放映到全屏?

pdf - 使用 HTML 到 PDF 转换器(例如 Winnovative)标记 PDF

php - 如何多次加载AJAX来分别更改页面(页码)?

javascript - 图像宽度在 Safari 中不会按比例变化

css - 使用 Skeleton V2.0.4 的 7 列响应式布局

html - 垂直标题表 - 标题和行颜色相同