2011-01-21 21 views
36

Quindi, ho qualche problema a far funzionare il mio script SE viene premuto il tasto Tab. Dopo un po 'di ricerca su google, il codice di accesso per Tab è 9. Inoltre, mentre stiamo parlando, c'è qualche modo migliore per verificare se un tasto viene premuto senza usare charcodes? Sto chiedendo perché continuo a ricevere il seguente Warning da firebug quando si utilizza charcode:jQuery: chiave per tasto TAB?

La proprietà 'charCode' di un evento keyup non deve essere utilizzata. Il valore non ha significato.

In ogni caso, funziona ancora, quindi non è questo il problema. Questo è il codice che uso:

$('/* my inputs */').keyup(function(e) { 
    console.log('keyup called'); 
    var code = e.keyCode || e.which; 
    if (code == '9') { 
    console.log('Tab pressed'); 
    } 
}); 

Utilizzando il codice sopra la console viene lasciato vuoto, nulla si aggiunge (utilizzando Firebug). Certo, ho provato a fare cose reali invece di loggare del testo, ma non viene eseguito nulla. Quindi qualcuno può capire perché questo non funziona? C'è un modo migliore per verificare se un tasto è premuto?

Grazie in anticipo.

risposta

66

La mia impressione è che quando si preme il tasto tab, l'ingresso del modulo perde il focus, prima della keyup accade . Provare a cambiare il legame con il corpo, in questo modo:

$('body').keyup(function(e) { 
    console.log('keyup called'); 
    var code = e.keyCode || e.which; 
    if (code == '9') { 
    alert('Tab pressed'); 
    } 
}); 

Poi, se funziona (lo fa per me) provare a cambiare il legame keyDown, invece, e restituire false. In questo modo puoi implementare il tuo comportamento personalizzato.

$('.yourSelector').keydown(function(e) { 
    console.log('keyup called'); 
    var code = e.keyCode || e.which; 
    if (code == '9') { 
    alert('Tab pressed'); 

    return false; 
    } 

}); 

Uno di questi due dovrebbe funzionare ... se è corpo, è possibile collegare un gestore keydown sul corpo, quindi se si tratta di scheda, trovare il campo con messa a fuoco (Penso che ci sia la funzione .hasFocus()?) e se è quello che vuoi, procedi e restituisci false. Altrimenti, lascia che il browser faccia la sua parte.

Se si voleva aggiornare il campo con un carattere di tabulazione, provate questo nella vostra callback:

var theVal = $(this).val(); 
theVal = theVal + ' '; 
$(this).val(theVal); 

non ho ancora testato, ma dovrebbe funzionare. Puoi anche aggiungere 3 o 4 spazi anziché il carattere di tabulazione, se ti sta dando problemi.

+1

Avevi ragione, l'input perde lo stato attivo prima che venga eseguito il keydown. Ho cambiato la chiave su keydown e funziona come dovrebbe ora. Grazie uomo! – qwerty

+0

Hm, mi sono imbattuto in un altro problema ora. Utilizzando return false; Non posso usare l'input, il che lo rende un po 'inutile. Ho provato preventDefault, ma non sembra funzionare neanche. C'è un modo per aggirare questo? – qwerty

+0

Suppongo che tu voglia aggiungere un carattere "tab" all'ingresso, giusto? Ho aggiunto un esempio di codice alla mia risposta. –

-1

se non succede nulla, non importa quale tasto si preme, forse c'è qualcosa di sbagliato con il selettore che si sta utilizzando? Si può verificare di aver selezionato correttamente, forse con qualcosa di simile:

console.log($('/* my inputs */').length); 
+0

Il selettore che uso è: $ ('. NameOfTheForm input') – qwerty

1
e = e || window.event; 
if(e.keyCode == 9) 
alert("Tab pressed"); 

Prova questo

+0

Ancora non funziona. Ho provato ad usare altri tasti per (provato enter (13) e page-down (34)), ma nessuno sembra funzionare. So che viene chiamato il keyup, quindi è qualcosa lì dentro. – qwerty

+0

Alert e.keyCode quindi, e guarda cosa sta succedendo. – AlanFoster

Problemi correlati