2012-02-10 13 views
12

Questo mi sta facendo impazzire e non riesco a trovare la risposta da nessuna parte.html phonegap android: la tastiera virtuale numerica ha il tasto successivo invece di andare

Ho moduli nell'app per PhoneGap. Se il tipo di input è "testo", viene visualizzata la tastiera del testo e viene visualizzato "go" nell'angolo. Quando fai clic su, invia il modulo. Tutto funziona come mi aspetterei. Ma se uso input type = "number", la tastiera numerica si apre e "next" viene visualizzato nell'angolo. Quando fai clic su Avanti, se c'è un'altra casella di input prima del tag button, questa va a quell'input. Va bene. . . non ideale, ma ha un senso. Ma se è l'ultimo campo di input sulla pagina, fare clic su "Avanti" non fa nulla. Non mette a fuoco il pulsante (anche con tabindex) e non invia il modulo (ideale).

Sto usando phonegap 1.3.0 e jquery 1.7 se ciò è di aiuto.

+0

+1 su questo, sto provando tutto. Nel frattempo PhoneGap è fino alla versione 1.5.0 e io uso jQueryMobile 1.0.1. Nessun progresso. Ho provato se è una conseguenza di uno qualsiasi degli attributi del campo, ma senza successo. – Wytze

+0

Non sembra che questo sia un problema di PhoneGap - accade anche nel normale browser Android. –

+0

È vero che questo non ha nulla a che fare con PhoneGap. Anche se penserei che ci fosse un metodo basato su Java per risolvere il problema perché la mia app è PhoneGap. L'unica correzione che ho trovato finora è il campo nascosto di Wytze che invia automaticamente il modulo. È un attacco terribile, e nel frattempo siamo pronti per PhoneGap 2.0. Trovo ancora questa una decisione molto odiosa da parte degli sviluppatori Android. – grail143

risposta

5

Ok, ora ho qualcosa che sembra una risposta e caga come una risposta.

È un attacco orribile, e sto vivendo alcuni effetti collaterali a questo punto, ma è comunque un piccolo salto per l'umanità.

Aggiungere un testo invisibile al modulo, che invia automaticamente il modulo non appena riceve lo stato attivo. Dal momento che può ricevere solo la messa a fuoco dall'utente premendo 'Avanti' o la tabulazione dall'ultimo campo numerico, dovrebbe esserci una logica abbastanza solida nella sequenza utente.

<input type='text' style="opacity:0;" onfocus="javascript:$('#thisForm').submit();"> 

Gli effetti collaterali sono:

  • il campo di modulo nascosto sarà brevemente visibile. È possibile evitare questo utilizzando il gestore onfocus per ri-concentrarsi sul campo numerico che è stato appena lasciato . Oppure puoi impostare la larghezza dell'ingresso su 0. Quest'ultimo funziona meglio per me.
  • se stai usando jQueryMobile come me, stai invitando orribile transizione di bruttezza su di te, quindi se il tuo modulo è in una finestra di dialogo e l'invio del modulo chiude la finestra di dialogo, assicurati di impostare la transizione della finestra di dialogo (quando è essere aperto da una schermata precedente) a 'nessuno'.
+0

Questo è stato molto utile! Grazie! – grail143

+0

Non ero in grado di nascondere l'input avendo larghezza: 0 su una versione di Android G2 per HTC 2.3.Tuttavia, sono stato in grado di nasconderlo usando background-color: transparent; e nascondere il fastidioso bordo arancione del focus di Android con -webkit-tap-highlight-color: rgba (255,255,255,0); http://stackoverflow.com/questions/5210481/disable-android-orange-outline-higlight-on-focus. – Bobby

+0

Hacky ma utile! Ho nascosto l'input impostando 'position: absolute' – maGo

9

È possibile rilevare la successiva pressione della tastiera utilizzando la seguente legano in JQuery:

$('input').on('keydown', function(e){ 
    if(e.which === 9) { 
     //your code here 
    } 
}); 

sul pulsante 'Avanti' emula l'evento keypress scheda su una tastiera, che è il codice chiave 9. Purtroppo, gli eventi keypress e keyup non rilevano il successivo evento chiave, quindi è necessario associarlo su keydown.

Spero che questo aiuti!

Problemi correlati