2015-05-06 34 views
1

display: none約束的鏈接不處於默認的製表順序。但是,當它們被透露時 - 例如當父鏈接獲得焦點時,下拉菜單的CSS將顯示一個子菜單 - 它們仍然不在標籤順序中。推測JavaScript是必需的,但只是設置tabindex="0"什麼也不做。如何添加鏈接到標籤順序,當它們用CSS可見時?

+1

請告訴我們一些代碼 – Grumpy

+0

http://codepen.io/gyrus/pen/waKjKv/我知道有材料的負荷在t周圍他一般的鍵盤可訪問的下拉菜單的問題。我只是試圖看看是否可以簡單地將顯示的子頁面鏈接添加到Tab鍵順序,以便它們通過Tab鍵而不是跳過。 –

+1

也許這將有助於 - https://developer.mozilla.org/en-US/docs/Web/Accessibility/Keyboard-navigable_JavaScript_widgets 如果確實如此,請在SO中回答您自己的問題。 – tiblu

回答

0

這裏的問題是,只要您切斷「帶有子級的頂級頁面」鏈接,就會更新CSS,並且在錨點可以獲得焦點之前,錨點的父級變爲顯示:無。您需要使用JavaScript來解決此問題,並使用超時延遲CSS中的更改,直到您可以確定焦點丟失是否導致焦點轉移到子元素。

當父級顯示時設置tabindex =「0」:none不會幫助,display:none表示內容可能不在文檔中。

+0

謝謝。我認爲我在CSS':hover'和''''focus'之間感到困惑,它應用於'a'和'li'(當鼠標移過它時保持子菜單打開)和':focus'說明標籤觸發。 JS就是這樣。 –

0

我想出了一個基本上可行的解決方案:http://codepen.io/gyrus/pen/waKjKv/在IE中似乎存在一些問題,我正在研究這個問題。但總的思路是:

  • 隱藏下拉
  • 設置數據屬性標誌下拉里面的所有鏈接是否具有焦點之前添加一個小的延遲,並隱藏
前檢查這

這僅僅是jQuery的,檢查筆更多:

jQuery(document).ready(function($) { 
    $('.nav').on('mouseenter focusin', '.menu-level-0.menu-item-has-children', function(e) { 
     var el = $(this); 
     // Show sub-menu 
     el.attr('aria-expanded', 'true') 
      .find('.sub-menu-wrapper').show(); 
    }).on('mouseleave focusout', '.menu-level-0.menu-item-has-children', function(e) { 
     var el = $(this); 
     // Only hide sub-menu after a short delay, so links get a chance to catch focus from tabbing 
     setTimeout(function() { 
      var smw = el.find('.sub-menu-wrapper'); 
      if (smw.attr('data-has-focus') !== 'true') { 
       el.attr('aria-expanded', 'false'); 
       smw.hide(); 
      } 
     }, 100); 
    }).on('focusin', '.sub-menu-wrapper', function(e) { 
     var el = $(this); 
     el.attr('data-has-focus', 'true'); 
    }).on('focusout', '.sub-menu-wrapper', function(e) { 
     var el = $(this); 
     el.attr('data-has-focus', 'false');       
     // Hide sub-menu on the way out 
     el.hide().parents('.menu-level-0').attr('aria-expanded', 'false'); 
    }); 
}); 
相關問題