Domanda

Sono consentendo la navigazione da tastiera per un menu. Io corro in un problema in una situazione particolare:

<ul>
    <li><a href="" class="link1">link</a></li>
    <li><a href="" class="link2">link</a></li>
    <li><a href="" class="link3">link</a></li>
</ul>

jQuery:

$('ul').keypress(function (eh){
    var keyPressed = eh.keyCode;
    if (keyPressed=='37'){
        $currentFocusedLink.closest('li').prev('li:first').find('a:first').focus()

};

Quello che succede:

Sono catturare i tasti freccia per navigare tra i menu. Questo funziona tranne quando il cursore si trova prima del primo carattere di un collegamento e mi ha colpito la freccia indietro.

Nei Credo accade è che il cursore si sposta e quindi la pressione del tasto viene catturato. Perché il cursore si sposta nel tag di ancoraggio precedente, poi innesca messa a fuoco. Ma perché sto anche catturare la pressione dei tasti e l'assegnazione di messa a fuoco, qualunque sia il mio caso messa a fuoco è viene chiamato due volte.

Un modo per aggirare questo problema?

UPDATE:

Ecco un po 'di codice di esempio per provare ad ottenere una buona idea di ciò che sta accadendo.

HTML:

<div class="testNav">
      <a href="">TEST LINK 1</a>
      <a href="">TEST LINK 2</a>
      <a href="">TEST LINK 3</a>
      <a href="">TEST LINK 4</a>
      <a href="">TEST LINK 5</a>
</div>

JQuery:

var $ activeLink;

$('.testNav')
    .find('a')
        .focus(function(){
             $activeLink = $(this);      
        })
        .end()
    .keypress(function (eh){
        var keyPressed = eh.keyCode;
        if (keyPressed=='37'){
            $activeLink.prev('a').focus()
        };
     });

Si noti che è possibile scheda avanti e indietro per ogni link che bene.

Ora, scheda per il 5 ° di collegamento e spingere la freccia indietro. Si passa al LINK 3. Premere di nuovo e va a LINK 1.

I pensare La ragione è come detto sopra ... il mio script applica messa a fuoco, ma così fa l'atto di spostare il cursore nel tag di ancoraggio precedente. Sia questo accada quando si preme la freccia indietro.

È stato utile?

Soluzione 2

SOLUZIONE:

Questo dovrebbe essersi verificato a me prima, ma l'eventuale correzione è stata per attaccare 'preventDefault ()' per l'evento KeyPress. La chiave è quello di individuare prima i tasti premuti, allora solo preventDefault sui tasti particolari che stai cercando (oppure perdere la funzionalità della tastiera sulla pagina web).

Altri suggerimenti

È possibile utilizzare il jCaret plugin per controllare se il cursore è stato prima della prima carattere e gestire questa situazione come un caso limite.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top