jQuery:通过 Tab 访问下拉菜单项

标签 jquery drop-down-menu accessibility

我正在尝试通过键盘访问下拉菜单(仅使用 Tab,不使用访问键)。我不知道如何使子项目可访问。

所需的行为如下:当单击“item”或获得焦点时,显示列表;当“项目”失去焦点(模糊)时,如果没有“子项目”获得焦点(这意味着它已通过键盘访问),则隐藏列表。

fiddle :http://jsfiddle.net/DBdbz/

HTML

<p id="ui"><a href="#">Item</a></p>
<ul>
    <li><a href="#">Sub item 1</a></li>
    <li><a href="#">Sub item 1</a></li>
    <li><a href="#">Sub item 1</a></li>
</ul>

JS

$('ul').hide();

$('#ui a').on('focus', function() {
  $('ul').show();
});

$('#ui a').on('blur', function() {
  $('ul').hide();
});

感谢您的帮助。

最佳答案

这个怎么样:http://jsfiddle.net/DBdbz/6/

要让焦点/模糊在每个浏览器上工作,唯一需要的是给定元素上的 tabindex(无论是哪一个,请参阅 Lee 的 link ):

<p id="ui"><a href="#" tabindex="1">Item</a></p>
<ul>
    <li><a href="#">Sub item 1</a></li>
    <li><a href="#">Sub item 1</a></li>
    <li><a href="#">Sub item 1</a></li>
</ul>

JS 来了:

$('ul').hide();

$('#ui a').on('focus', function() {
  $('ul').show();
});

$('#ui a').on('keydown', function(e) {
  if (e.keyCode == 9) {
    $('ul').addClass('tab');
  }
});

$('ul').on('mouseover', function() {
  $('ul').addClass('mouse');
});

$('ul').on('mouseout', function() {
  $('ul').removeClass('mouse').removeClass('tab');
});

$('ul li:last-child a').on('blur', function() {
  if ($('ul').hasClass('tab')) {
    $('ul').hide().removeClass('tab');
  } 
});

$('#ui a').on('blur', function() {
  if (!$('ul').is('.tab, .mouse')) {
    $('ul').hide();
  }
});

关于jQuery:通过 Tab 访问下拉菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15093867/

相关文章:

jquery - 使用 jquery 按文本设置下拉值

Android - 阻止 TalkBack 大声宣布 TextView 标题

android - 设计适合大文本用户的 android 布局

javascript - 自定义下拉按钮的辅助功能

jquery - 如何使用jquery在div标签中附加span标签?

javascript - 动态过滤django表单中的内容

javascript - 在电话和电子邮件输入框中显示正确的 fa fa 图标

javascript - 如何避免 div 动画形式落后于相关 div?

javascript - 选择另一个选择下拉列表中的一个选项时,如何显示选择下拉列表

flutter - 应该只有一项具有 [DropdownButton] 的值