2016-04-20 10 views
11

Sulla mia scheda Samsung Galaxy 4 (Android 4.4.2, Chrome: 49.0.2623.105) mi sono imbattuto in una situazione in cui la keyCode è sempre 229.keyCode su Android è sempre 229

Ho installato un semplice test per due situazione

<div contenteditable="true"></div> 
<input> 
<span id="keycode"></span> 

script:

$('div, input').on('keydown', function (e) { 
    $('#keycode').html(e.keyCode); 
}); 

DEMO

fortuna Posso trovare post su questo, ma non sono riuscito a trovarne uno con una soluzione funzionante. Qualcuno ha suggerito di utilizzare invece keyup o di utilizzare l'evento textInput, ma quello viene attivato solo su blur.

Ora, per coronare il tutto, questo non accade con il browser di default magazzino :(

Qualsiasi aiuto sarebbe apprezzato

AGGIORNAMENTO: Se si scopre che questo non è possibile, posso ancora afferrare il carattere prima del punto di inserimento: post

+0

Ho riprodotto il problema nel browser Chrome su un Samsung Galaxy S4. Tuttavia funziona bene nel browser azionario. –

risposta

2

L'esecuzione dello stesso problema si verifica solo con la tastiera Samsung di serie su Android. Una soluzione è stata quella di disattivare le previsioni della tastiera, che ha corretto l'input. Analizziamo ancora per vedere se è possibile trovare un lavoro in JS land.

Modifica: Sono riuscito a trovare una soluzione per il nostro caso. Quello che stava accadendo è che avevamo una whitelist di caratteri consentiti che un utente poteva inserire nella nostra casella di input. Questi erano caratteri alfanumerici più alcuni caratteri di controllo inseriti nella whitelist (ad esempio, invio, esc, su/giù). Qualsiasi altro carattere inserito avrebbe il default dell'evento impedito.

Quello che è successo è che tutti gli eventi con keycode 229 sono stati prevenuti, e di conseguenza non è stato inserito alcun testo. Una volta aggiunto anche il keycode 229 alla whitelist, tutto è tornato a funzionare correttamente.

Quindi, se si utilizza un componente di controllo di input per modulo personalizzato o di terze parti, assicurarsi di verificare che il codice chiave 229 sia autorizzato o consentito e non venga impedito il default.

Spero che questo aiuti qualcuno.

+0

Sarei interessato a una soluzione di lavoro, ma ho rinunciato e ora mi sto concentrando su una soluzione in cui utilizzo la posizione di accento circonflesso e confronti la stringa prima della pressione dei tasti e dopo. Nota che questa soluzione non funziona molto bene per chiavi come SHIFT, CTRL, ecc. –

1

Avevo lo stesso problema sui telefoni Samsung S7. Risolto sostituendo l'evento da keydown a keypress.

$("div, input").keypress(function (e) { 
    $("#keycode").html(e.which); 
}); 

jQuery normalizza questa roba, quindi non c'è alcuna necessità di utilizzare qualcosa di diverso e.which https://stackoverflow.com/a/302161/259881

+0

Provato questo e l'evento non è mai stato licenziato per me (panasonic hardpad). –

10

evento Pressione normale non dà keyCode nel dispositivo Android. C'è già stato un grande discussion su questo.

Se si desidera acquisire la stampa di space bar o special chars, è possibile utilizzare l'evento textInput.

$('input').on('textInput', e => { 
    var keyCode = e.originalEvent.data.charCodeAt(0); 
    // keyCode is ASCII of character entered. 
}) 

Nota: textInput non viene attivato su alfabeti, il numero, backspace, entrare e pochi altri tasti.

+0

Questo ha risolto il mio problema. Grazie a @Imamudin Naseem – Krunal