2013-04-06 73 views
-1

我有一個像如何打開/懸停使用鍵盤子菜單項的快捷鍵

<li class="main-menu"> 
    <a accesskey="a">menu item 1</a> 
    <ul> 
    <li> 
     <a accesskey="d">submenuItem1</a> 
    </li> 
    <li class="submenu"> 
     <a accesskey="e">submenuItem2</a> 
     <ul> 
     <li class="innermenu"><a >innerMenuItem1</a></li> 
     <li><a>innerMenuItem1</a></li> 
     <li><a>innerMenuItem2</a></li> 
     <li><a>innerMenuItem3</a></li> 
     <li><a>innerMenuItem4</a></li> 
     </ul> 
    </li> 
    </ul> 
</li> 

如何懸停/顯示個子菜單時選擇主菜單項和子菜單時,選擇顯示innermenu項目。很新的jQuery的有一些問題,在做到這一點esspecially子菜單內menu.Thank你..

+1

那麼你有什麼具體的問題,你有什麼嘗試? – span 2013-04-06 18:05:27

回答

0

accesskey實際上只適用於與ALT鍵一起,我們可以攔截一般keydown事件並處理該熱鍵辦法。如果我們攔截了keydown並且它是其中一個鍵,我們想要在相關的li上切換.active類。然後使用CSS來隱藏和顯示基於懸停/課程狀態的子菜單。

我下面的示例使用data-key屬性來設置屬性,在頁面加載時,我們將鍵和關聯元素提取到數組中。掃描該陣列並在處理​​時採取行動。

jsFiddle

HTML

<ul class="main-menu"> 
<li data-key="65"> 
    <a>menu item 1 (a)</a> 
    <ul> 
    <li data-key="68"> 
     <a>submenuItem1 (d)</a> 
    </li> 
    <li data-key="69"> 
     <a>submenuItem2 (e)</a> 
     <ul> 
     <li><a>innerMenuItem1</a></li> 
     <li><a>innerMenuItem1</a></li> 
     <li><a>innerMenuItem2</a></li> 
     <li><a>innerMenuItem3</a></li> 
     <li><a>innerMenuItem4</a></li> 
     </ul> 
    </li> 
    </ul> 
</li> 
</ul> 

CSS

li ul { 
    display:none; 
} 

li:hover > ul, 
li.active > ul { 
    display:block; 
} 

JS

var keys = []; 

$(document).ready(function() { 
    $('[data-key]').each(function() { 
     keys.push({ 
      key: $(this).attr('data-key'), 
      elem: $(this) 
     }); 
    }); 
}); 

$(window).keydown(function(e) { 
    for (var i = 0; i < keys.length; i++) { 
     if (e.keyCode == keys[i].key) { 
      keys[i].elem.toggleClass('active'); 
      return; 
     } 
    } 
}); 
+0

在提琴似乎工作正常,但相同的代碼,當我在示例HTML頁面中使用看到的結果,錯誤消息「對象預計」在語句行$(document).ready(function(){ – Vijay 2013-04-07 11:45:59

+0

你有沒有正確包含jQuery? – 2013-04-07 12:03:49