2013-07-18 21 views
8

È possibile navigare utilizzando la tastiera nel menu a discesa utilizzando Tab e navigare utilizzando i tasti freccia per gli elementi secondari del menu a discesa?Abilitazione della navigazione da tastiera nel menu a tendina Bootstrap

Ecco il codice che ho adesso:

<input type="text" value="click tab to jump to the drop down."/> 
<div class="bs-docs-example"> 
    <div class="dropdown clearfix"> 
     <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu" style="display: block; position: static; margin-bottom: 5px; *width: 180px;"> 
     <li><a tabindex="-1" href="#">Menu Item A</a></li> 
     <li><a tabindex="-1" href="#">Menu Item B</a></li> 
     <li><a tabindex="-1" href="#">Menu Item C</a></li> 
     <li class="divider"></li> 
     <li><a tabindex="-1" href="#">Menu Item A1</a></li> 
      <li class="dropdown-submenu"> 
       <a tabindex="-1" href="#">Menu Item B1</a> 
       <ul class="dropdown-menu"> 
        <li><a tabindex="-1" href="#">You should navigate here with the keyboard.</a></li> 
        <li><a tabindex="-1" href="#">Thanks For your Help!</a></li> 
       </ul> 
      </li> 
     </ul> 
    </div> 
</div> 

http://jsfiddle.net/MGwVM/1/

+0

Vedo che hai modificato dopo che ho risposto. Hai visto la mia risposta? – rybo111

+1

Commento tardivo, ma ... penso che al giorno d'oggi possiamo semplicemente aggiungere role = "menu" al menu ul.dropdown e role = "navigation" al div.navbar (in entrambi i bootstrap 2 e 3) e che sembra abilitare l'accessibilità della tastiera piuttosto bene. Ma penso che il markup html nella tua domanda non segua gli esempi di bootstrap ... – djKianoosh

risposta

11

Aggiornamento

Bootstrap supporta ora su/giù come standard.

Quindi, se volete Tab per attivare il menu a discesa, appena get the key code (9) ed effettuare le seguenti operazioni:

$('.input-group input').keydown(function(e){ 
    if(e.which == 9){ // tab 
     e.preventDefault(); 
     $(this).parent().find('.dropdown-toggle').click(); 
     $(this).parent().find('.dropdown-menu a:first').focus(); 
    } 
}); 

E se si desidera aggiungere ulteriori funzionalità per quando l'utente si concentra su un menu a discesa voce di menu:

$('.dropdown-menu a').keydown(function(e){ 
    switch(e.which){ 
     case 36: // home 
      e.preventDefault(); 
      $(this).closest('.dropdown-menu').find('a:first').focus(); 
      break; 
     case 35: // end 
      e.preventDefault(); 
      $(this).closest('.dropdown-menu').find('a:last').focus(); 
      break; 
    } 
}); 

Vedere this JSFiddle per una demo.

+0

home/end and letter navigation is missing :-) – xamiro

+0

@ xamiro-dev Vedi risposta aggiornata. Puoi aggiungere una lettera di navigazione [trovando il codice di accesso] (http://keycode.info) e aggiungendo un caso di commutazione. – rybo111

1

Bel esempio.

Ma, perché hai impostato uno setTimeout? Qualche ragione specifica?

setTimeout(function(){ 
    $(".search-option:first").focus(); 
},100); 

Ho fatto lo stesso esempio, simulando una casella di selezione di input, senza un timeout. Check this out.

+0

Probabilmente era una stranezza del browser in quel momento. – rybo111

+1

@Emzor Il codice è stato aggiornato se sei interessato. – rybo111

+1

@ rybo111 Grazie mille per le informazioni :-) – Emzor

Problemi correlati