简体   繁体   English

如何使用带有 ENTER 键的 JQuery UI 菜单?

[英]How do you use JQuery UI menu with ENTER key?

I'm working on an application that needs to be fully keyboard controllable, everything is working great up until now, but i can't make the JQuery UI Menu widget works when using the ENTER key.我正在开发一个需要完全由键盘控制的应用程序,到目前为止一切都很好,但是当使用 ENTER 键时,我无法使 JQuery UI 菜单小部件工作。

From the documentation, there seems to be no specifics method to make this work so i'm using "onclick" on the list elements从文档来看,似乎没有具体的方法来完成这项工作,所以我在列表元素上使用“onclick”

  <li onclick="alert('Books Action')"><div>Books</div></li>

Here is a jsfiddle ( https://jsfiddle.net/djbh6r82/ ) with the example from JQuery UI documentation and an alert on the first menu item -> It works fine when i click on it but with 'ENTER' it just bring me back to the start (focus on menu is not lost)这是一个 jsfiddle ( https://jsfiddle.net/djbh6r82/ ),示例来自 JQuery UI 文档和第一个菜单项上的警报->当我单击它时它工作正常,但使用“ENTER”它只会带给我回到开始(专注于菜单不会丢失)

 $(function() { $("#menu").menu(); });
 .ui-menu { width: 150px; }
 <link rel="stylesheet" href="//code.jquery.com/ui/1.13.0/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/jquery-3.6.0.js"></script> <script src="https://code.jquery.com/ui/1.13.0/jquery-ui.js"></script> <ul id="menu"> <li class="ui-state-disabled"> <div>Toys (n/a)</div> </li> <li onclick="alert('Books Action')"> <div>Books</div> </li> <li> <div>Clothing</div> </li> <li> <div>Electronics</div> <ul> <li class="ui-state-disabled"> <div>Home Entertainment</div> </li> <li> <div>Car Hifi</div> </li> <li> <div>Utilities</div> </li> </ul> </li> <li> <div>Movies</div> </li> <li> <div>Music</div> <ul> <li> <div>Rock</div> <ul> <li> <div>Alternative</div> </li> <li> <div>Classic</div> </li> </ul> </li> <li> <div>Jazz</div> <ul> <li> <div>Freejazz</div> </li> <li> <div>Big Band</div> </li> <li> <div>Modern</div> </li> </ul> </li> <li> <div>Pop</div> </li> </ul> </li> <li class="ui-state-disabled"> <div>Specials (n/a)</div> </li> </ul>

Am I doing this wrong?我做错了吗? I tried different thing ( <a href='#' onclick="xxx"></a> instead of div, onclick on div instead of ul) but nothing seems to work我尝试了不同的东西( <a href='#' onclick="xxx"></a>而不是 div,onclick 在 div 而不是 ul)但似乎没有任何效果

When you review the API Docs, you will see under https://api.jqueryui.com/menu/ the following details:当您查看 API 文档时,您将在https://api.jqueryui.com/menu/下看到以下详细信息:

Keyboard interaction键盘交互

  • ENTER/SPACE : Invoke the focused menu item's action, which may be opening a submenu. ENTER/SPACE :调用焦点菜单项的操作,这可能是打开子菜单。
  • UP : Move focus to the previous menu item. UP :将焦点移至上一个菜单项。
  • DOWN : Move focus to the next menu item. DOWN :将焦点移至下一个菜单项。
  • RIGHT : Open the submenu, if available. RIGHT :打开子菜单(如果有)。
  • LEFT : Close the current submenu and move focus to the parent menu item. LEFT :关闭当前子菜单并将焦点移至父菜单项。 If not in a submenu, do nothing.如果不在子菜单中,则什么也不做。
  • ESCAPE : Close the current submenu and move focus to the parent menu item. ESCAPE :关闭当前子菜单并将焦点移至父菜单项。 If not in a submenu, do nothing.如果不在子菜单中,则什么也不做。

Typing a letter moves focus to the first item whose title starts with that character.键入一个字母会将焦点移至标题以该字符开头的第一个项目。 Repeating the same character cycles through matching items.通过匹配的项目重复相同的字符循环。 Typing more characters within the one second timer matches those characters.在一秒计时器内键入更多字符与这些字符匹配。

Disabled items can receive keyboard focus, but do not allow any other interaction.禁用的项目可以接收键盘焦点,但不允许任何其他交互。

So the Enter is already engaged and will trigger the select event for the Menu.因此Enter已启用,并将触发菜单的select事件。 You will then want to perform some action in the select callback.然后,您需要在select回调中执行一些操作。

 $(function() { $("#menu").menu({ select: function(e, ui) { console.log(ui.item.text().trim(), "Selected"); } }).focus(); });
 .ui-menu { width: 150px; }
 <link rel="stylesheet" href="//code.jquery.com/ui/1.13.0/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/jquery-3.6.0.js"></script> <script src="https://code.jquery.com/ui/1.13.0/jquery-ui.js"></script> <ul id="menu"> <li class="ui-state-disabled"> <div>Toys (n/a)</div> </li> <li> <div>Books</div> </li> <li> <div>Clothing</div> </li> <li> <div>Electronics</div> <ul> <li class="ui-state-disabled"> <div>Home Entertainment</div> </li> <li> <div>Car Hifi</div> </li> <li> <div>Utilities</div> </li> </ul> </li> <li> <div>Movies</div> </li> <li> <div>Music</div> <ul> <li> <div>Rock</div> <ul> <li> <div>Alternative</div> </li> <li> <div>Classic</div> </li> </ul> </li> <li> <div>Jazz</div> <ul> <li> <div>Freejazz</div> </li> <li> <div>Big Band</div> </li> <li> <div>Modern</div> </li> </ul> </li> <li> <div>Pop</div> </li> </ul> </li> <li class="ui-state-disabled"> <div>Specials (n/a)</div> </li> </ul>

Giving it focus up front allows it to already be invoked.预先给它focus允许它已经被调用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM