2012-02-15 9 views
10

Il codice riportato di seguito funziona perfettamente in Chrome, Firefox, su IPhone e persino nei browser di terze parti su Android. Tuttavia, quando viene eseguito all'interno degli eventi chiave del browser nativo per caratteri speciali come Å, Ä e Ö sulla mia tastiera svedese non vengono semplicemente attivati.Nessun evento di pressione tasto per determinati tasti nel browser Android

L'esempio dovrebbe consentire all'utente di inserire un singolo carattere alla volta. Funziona come un incantesimo, a meno che non abbia premuto tasti Android come Å, Ä o Ö per cui posso inserire qualsiasi numero di caratteri.

Ecco un jsFiddle per chiunque desideri provarlo: http://jsfiddle.net/x7H6f/. Se non hai tasti speciali come quelli svedesi stampati sulla tastiera, caratteri come é (hold E) dovrebbero fare il "trucco".

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Key Event test</title> 
    </head> 
    <body> 
     <input type="text" id="a" name="test" /> 
     <script> 
      document.getElementById("a").onkeypress = function(e) { 
       e = e || window.event; 
       var k = e.keyCode || e.which; 
       this.value = String.fromCharCode(k); 
       return false; 
     } 
     </script> 
    </body> 
</html> 

E no, keydown e keyup non funzionano neanche. Mi sono perso qualcosa o si tratta di un bug? È terribilmente fastidioso quando si sviluppano app svedesi in PhoneGap!

Grazie!


EDIT: Come Manor dice nella sua risposta, l'evento input può essere utilizzato. Ecco un violino che dimostra le differenze tra gli eventi keypress, input e change: http://jsfiddle.net/Qxd76/ (utilizzare http://jsfiddle.net/Qxd76/show per visualizzare il risultato su uno smartphone).

+0

Im vivendo la stessa cosa, questo è probabilmente un bug in Android? – rapadura

+0

Sono sicuro che sia un bug nel browser nativo per Android, che è ciò che le visualizzazioni web utilizzano. Non l'ho confermato, ma ho il sospetto che dovrebbe essere risolto dopo la versione 4, dopo aver cambiato il browser in Chrome dopo? – Zut

+0

@rapadura @Zut L'evento '' input'' non restituisce '' keyCode'' o '' which'' o '' charCode'' .. – Kosmetika

risposta

9

ho appena trascorso un sacco di tempo su questo problema. mi sto sviluppando in ebraico e tutte le carte in ebraico non mi stanno dando fuoco.

ho trovato la soluzione e ti darò per farla breve spiegare prima

quando l'uso di tutti gli eventi chiave di ricerca del browser per la chiave che preme per. Causa qualche ragione tutte le carte in altre lingue dall'inglese in Android browser nativo è sconosciuta e questo è il motivo per cui non si accende alcun evento quando si compila la carta di input.

la soluzione è cercare l'evento nell'input e non sul tasto. per esempio se abbiamo nel metodo di input di testo .change() sarà fantastico per noi.

sto usando nel metodo addEventListener() e funziona come un fascino.

questo è il codice

var exmpleInput = document.getElementById('input-id'); 
if(exmpleInput) { 
    exmpleInput.addEventListener("input", function() { 
     exampleFunction(this) 
    }, false); 
} 
+0

L'evento di input funziona perfettamente! Sebbene l'evento di cambiamento si attivi solo quando l'input perde lo stato attivo e non può essere utilizzato come descritto nella domanda. – Zut

+0

Salvato la mia giornata !!! – Lentyai

Problemi correlati