2016-05-09 12 views
7

Ho un campo di testo in cui gli utenti possono digitare i dati. Possono usare il tasto tab e quindi il campo diventa rientrato. Funziona benissimo su tutto tranne ios con una tastiera bluetooth.Javascript - Rilevamento chiave scheda iPad con tastiera Bluetooth

Se visito lo http://www.rapidtables.com/tools/notepad.htm, posso accedere al mio desktop/laptop. Ma sul mio iPad ... niente da fare.

Se si visita https://api.jquery.com/keydown/, https://api.jquery.com/keyup/, https://api.jquery.com/keypress/ ... NESSUNO di essi rileva il tasto di tabulazione su iPad.

Il tasto di tabulazione funziona in applicazioni native di ios, come Notes, e il tasto tab naviga tra i campi all'interno di una pagina web. C'è un modo per rilevare la chiave di tabulazione in Javascript che qualcuno conosce?

EDIT

Ecco un violino ho buttato insieme in modo da poter vedere il codice e problema in azione: https://jsfiddle.net/9jv0bmbx/1/ Fondamentalmente sto solo controllando che e.keyCode===9 che funziona secondo il desktop/laptop. Su iPad, registra OGNI chiave eccetto il tasto di tabulazione.

+0

Quindi, se si esegue la pressione del tasto quando si preme la scheda sui dispositivi in ​​conflitto, non registra nulla? In caso contrario, potrebbe essere che la scheda stia uscendo dal campo senza effettivamente attivare una pressione di tasto sul campo. Prova a creare un logger di keypress globale e vedi se riesci a registrare una scheda. Il seguente dovrebbe farlo. $ (documento) .keydown (function (e) { \t \t \t console.log (e.keyCode);}); – RayfenWindspear

+0

L'ho aggiunto al violino. Ancora niente. Ma il tasto tab nel primo campo sposta ancora lo stato attivo sul secondo campo. Quindi la chiave di tabulazione è registrata dall'applicazione (browser) per gestire gli eventi di messa a fuoco, ma non come evento di tastiera che indovino.Ho provato sia Chrome che Safari, lo stesso risultato. –

+0

Ho messo le mani su uno ... il mio suggerimento non ha funzionato. Scusate. – RayfenWindspear

risposta

1

EDIT2:

Ecco un'altra opzione per una soluzione. Ho trovato un articolo che spiega come catturare TUTTI gli eventi. Di seguito c'è un jsfiddle, ed ecco lo article ho trovato questo concetto. Si noti che nel jsfiddle restituisco l'addEventListener originale perché ciò che è necessario è stato fatto dopo aver aggiunto un listener vuoto.

jsfiddle

var oldAddEventListener = EventTarget.prototype.addEventListener; 

EventTarget.prototype.addEventListener = function(eventName, eventHandler) 
{ 
    oldAddEventListener.call(this, eventName, function(event) { 
     if(event.target.id === "textarea" && event.keyCode===9){ 
     event.preventDefault(); 
     $(this).val($(this).val()+"\t"); 
     $("#log").append("<li>Tab Pressed</li>"); 
     } 
    eventHandler(event); 
    }); 
}; 
$("#textarea").keydown(function(e) { 

}); 

EventTarget.prototype.addEventListener = oldAddEventListener; 

EDIT:

La tastiera di prova qui cattura la scheda keydown. Cerca in questa libreria, dovrebbe risolvere i tuoi problemi. Utilizza direttamente la libreria o scopri come cattura la scheda su iOS scavando nel codice. http://dmauro.github.io/Keypress/

C'è una sorta di problema hardware/funzione che interferisce con la normale pressione di un tasto di tabulazione. Premendo OPTION + Tab sparerai al tuo gestore come al solito. Forse c'è una sorta di impostazione che sta causando questo, ma ovviamente non puoi aspettarti che i tuoi utenti cambino le loro impostazioni per usare la tua app. Potresti riuscire a trovare un modo per sfruttarlo in qualche modo, ma sembra che questo sia il comportamento predefinito e tu ne sia bloccato.

Potrebbe essere possibile rilevare dispositivi iOS e capire una sorta di sovrascrittura per il comportamento predefinito della scheda. Oppure potresti essere in grado di catturare focusOut o sfocare eventi e rilevare se non è stato causato dal mouse.

+0

Ho un'altra modifica da fare con una soluzione, ma devo aspettare che il ragazzo con l'iPad torni da pranzo per sbloccarlo XD. – RayfenWindspear

+0

Ho appena installato http://jsfiddle.net/gqxgax76/ per vedere se potevo usare Keypress. Quello che ho scoperto è che quando il documento/finestra è focalizzato e nessun elemento lo fa, allora il tasto tab è riconosciuto. Non appena ti concentri su un input/textarea, la scheda non funziona più. Vado a vedere se riesco a far funzionare il secondo esempio. –

+0

Quel jsfiddle non mostra le schede sulla mia estremità. OPT + Tab funziona ancora. – RayfenWindspear