2016-04-20 11 views
11

Auf meinem Samsung Galaxy Tab 4 (Android 4.4.2, Chrome: 49.0.2623.105) ich in eine Situation lief, wo die keyCode immer ist 229.keyCode auf Android ist immer 229

Ich habe Setup ein einfacher Test für zwei Situation

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

Skript:

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

DEMO

Glück Ich kann Post darüber finden, aber ich konnte keine mit einer funktionierenden Lösung finden. Jemand schlug vor, stattdessen keyup zu verwenden oder das Ereignis zu verwenden, aber dieses wird nur auf blur ausgelöst.

nun zu allem, das mit dem Standard-Lager Browser kann leider nicht :(passieren

Jede Hilfe würde geschätzt

UPDATE: Wenn sich herausstellt, dass dies kann ich nicht möglich ist, noch greifen die Zeichen vor dem caret: post

+0

Ich reproduziert Ihr Problem in Chrome-Browser auf einem Samsung Galaxy S4. Es funktioniert jedoch gut im Stock Browser. –

Antwort

2

Laufen in das gleiche Problem, passiert nur mit Lager Samsung-Tastatur auf Android. Eine Umgehung war, die Tastaturvorhersagen auszuschalten, die die Eingabe fixierten. Analysiere weiter, um zu sehen, ob eine Arbeit in JS Land gefunden werden kann.

Edit: Ich habe es geschafft, eine Lösung für unseren Fall zu finden. Was passiert ist, ist, dass wir eine Whitelist von erlaubten Zeichen hatten, die ein Benutzer in unser Eingabefeld eingeben durfte. Dies waren alphanumerische Zeichen und einige Kontrollzeichen auf der weißen Liste (z. B. enter, esc, up/down). Bei jeder anderen Zeicheneingabe wird der Ereignisstandard verhindert.

Was passiert ist, dass alle Ereignisse mit Keycode 229 verhindert wurden, und als Ergebnis wurde kein Text eingegeben. Nachdem wir auch den Schlüsselcode 229 zur Whitelist hinzugefügt hatten, ging alles wieder in Ordnung.

Also, wenn Sie eine Art von benutzerdefinierten oder 3rd-Party-Formular Eingabesteuerkomponente verwenden, stellen Sie sicher, dass Schlüsselcode 229 ist auf der weißen Liste/erlaubt und nicht standardmäßig verhindert.

Ich hoffe, das hilft jemandem.

+0

Ich wäre an einer funktionierenden Lösung interessiert, habe aber aufgegeben und konzentriere mich jetzt auf eine Lösung, in der ich die Caret-Position nutze und die Saite vor dem Tastendruck und danach vergleiche. Beachten Sie, dass diese Lösung nicht sehr gut für Tasten wie SHIFT, CTRL usw. funktioniert. –

1

Ich hatte das gleiche Problem auf Samsung S7-Handys. Löste es durch Ersetzen des Ereignisses von Keydown zu Tastendruck.

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

normalisiert jQuery dieses Zeug, so gibt es keine Notwendigkeit, etwas zu verwenden, um andere als e.which https://stackoverflow.com/a/302161/259881

+0

Versuchte dies und das Ereignis hat nie für mich gefeuert (panasonic toughpad). –

10

Normale keypress Ereignis nicht geben keyCode in Android-Gerät. Es gab bereits eine große discussion auf diesem.

Wenn Sie die Presse von space bar oder special chars erfassen möchten, können Sie textInput Ereignis verwenden.

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

Hinweis: textInput nicht auf Alphabete ausgelöst bekommt, Zahl, Backspace, geben Sie und einige andere Tasten.

+0

Das hat mein Problem gelöst. Danke @Imamudin Naseem – Krunal