123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>Keyboard Navigation in Menu - jQuery EasyUI Demo</title>
- <link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
- <link rel="stylesheet" type="text/css" href="../../themes/icon.css">
- <link rel="stylesheet" type="text/css" href="../demo.css">
- <script type="text/javascript" src="../../jquery.min.js"></script>
- <script type="text/javascript" src="../../jquery.easyui.min.js"></script>
- </head>
- <body>
- <h2>Keyboard Navigation in Menu</h2>
- <p>Press Alt+W to focus the menu. Once the menu get focus, you will be able to navigate menu using keyboard keys.</p>
- <div style="margin:20px 0;"></div>
-
- <div class="easyui-panel" title="Menu" style="width:150px;">
- <div id="mm-nav" data-options="inline:true" style="width:100%">
- <div onclick="javascript:alert('new')">New</div>
- <div>
- <span>Open</span>
- <div style="width:150px;">
- <div><b>Word</b></div>
- <div>Excel</div>
- <div>PowerPoint</div>
- <div>
- <span>M1</span>
- <div style="width:120px;">
- <div>sub1</div>
- <div>sub2</div>
- <div>
- <span>Sub</span>
- <div style="width:80px;">
- <div>sub21</div>
- <div>sub22</div>
- <div>sub23</div>
- </div>
- </div>
- <div>sub3</div>
- </div>
- </div>
- <div>
- <span>Window Demos</span>
- <div style="width:120px;">
- <div>Window</div>
- <div>Dialog</div>
- <div>EasyUI</div>
- </div>
- </div>
- </div>
- </div>
- <div data-options="iconCls:'icon-save'">Save</div>
- <div data-options="iconCls:'icon-print',disabled:true">Print</div>
- <div class="menu-sep"></div>
- <div>Exit</div>
- </div>
- </div>
- <script type="text/javascript">
- (function($){
- function getParentMenu(rootMenu, menu){
- return findParent(rootMenu);
- function findParent(pmenu){
- var p = undefined;
- $(pmenu).find('.menu-item').each(function(){
- if (!p && this.submenu){
- if ($(this.submenu)[0] == $(menu)[0]){
- p = pmenu;
- } else {
- p = findParent(this.submenu);
- }
- }
- });
- return p;
- }
- }
- function getParentItem(pmenu, menu){
- var item = undefined;
- $(pmenu).find('.menu-item').each(function(){
- if ($(this.submenu)[0] == $(menu)[0]){
- item = $(this);
- return false;
- }
- });
- return item;
- }
- $.extend($.fn.menu.methods, {
- enableNav: function(jq, rootMenu){
- var firstItemSelector = '.menu-item:not(.menu-item-disabled):first';
- var lastItemSelector = '.menu-item:not(.menu-item-disabled):last';
- return jq.each(function(){
- var menu = $(this);
- rootMenu = $(rootMenu).length ? $(rootMenu) : menu;
- menu.attr('tabindex','0').css('outline','none').unbind('.menunav').bind('keydown.menunav', function(e){
- var item = $(this).find('.menu-active');
- switch(e.keyCode){
- case 13: // enter
- item.trigger('click');
- break;
- case 27: // esc
- rootMenu.find('.menu-active').trigger('mouseleave');
- break;
- case 38: // up
- var prev = item.length ? item.prevAll(firstItemSelector) : menu.find(lastItemSelector);
- prev.trigger('mouseenter');
- return false;
- case 40: // down
- var next = item.length ? item.nextAll(firstItemSelector) : menu.find(firstItemSelector);
- next.trigger('mouseenter');
- return false;
- case 37: // left
- var pmenu = getParentMenu(rootMenu, menu);
- if (pmenu){
- item.trigger('mouseleave');
- var pitem = getParentItem(pmenu, menu);
- if (pitem){
- pitem.trigger('mouseenter');
- }
- pmenu.focus();
- }
- return false;
- case 39: // right
- if (item.length && item[0].submenu){
- $(item[0].submenu).menu('enableNav', rootMenu).find(firstItemSelector).trigger('mouseenter');
- $(item[0].submenu).focus();
- }
- return false;
- }
- });
- });
- }
- });
- })(jQuery);
- $(function(){
- $('#mm-nav').menu().menu('enableNav');
- $(document).keydown(function(e){
- if (e.altKey && e.keyCode == 87){
- $('#mm-nav').focus();
- }
- })
- })
- </script>
- </body>
- </html>
|