Ereignis-Listener (onkeypress, onkeydown) bei Eingabe funktionieren nicht auf der Android-Tastatur

8

Ich weiß nicht warum, aber nach Stunden, die ich damit verbracht habe, kann ich sagen, dass etwas nicht stimmt.

Ich habe eine einfache Eingabe

%Vor%

Ich will, dass es nur Zahlen akzeptiert (Ziffer [0-9]) und nichts mehr. Um dies zu erreichen, habe ich einen Ereignis-Listener hinzugefügt, wo ich den Schlüsselcode des Ereignisses kontrolliere.

Nichts besonderes und alles funktioniert auf fast allen Plattformen, Probleme kommen mit Android. Hier das

  

type="Nummer"

bewirkt, dass eine numerische Tastatur erscheint - und das ist großartig - mit einigen anderen Zeichen (Komma, Punkt, Bindestrich ...). Wenn Sie eines dieser Sonderzeichen drücken, ist das Verhalten seltsam:

  • onkeypress event: absolut nicht feuern (warum ???)
  • onkeydown-Ereignis: Das Ereignis wird ausgelöst und die relative Funktion wird aufgerufen. Das Problem ist, dass der Browser bereits das Zeichen eingegeben hat (warum ??), so dass es nicht möglich ist, die "preventDefault" -Funktion von "event" aufzurufen.
  • bei Eingabe-Ereignis: Das Ereignis wird ausgelöst, aber "Code" und "welche" Eigenschaften des "Ereignis" -Objekts sind nicht definiert. Außerdem hat der Browser wie zuvor den Charakter eingegeben.

Was vermisse ich?

Meine Umgebung wird von AngularJs angetrieben, also habe ich Event-Listener innerhalb einer Direktive eingerichtet. Das gleiche Vorgehen mit jQuery löst jedoch keine Probleme.

Jemand kann vorschlagen, einen "$ parsers" zu verwenden, um meinen benutzerdefinierten Wert ohne unerwünschte Zeichen zu übertragen. Wie auch immer, das funktioniert nicht, ich denke, weil der Typ der Eingabe "Nummer" ist und es nur Zahlen erwartet (eine andere Möglichkeit zu sagen, der Browser auf Android macht etwas falsch ..)

Hier ist eine arbeitende Geige , die auf Android geöffnet wird.

Danke

    
Ernesto Schiavo 07.02.2017, 14:43
quelle

3 Antworten

2

Was ist mit dieser Direktive mit $parsers.unshift :

%Vor%

Und Verwendung:

%Vor%

Demo-Geige

Getestet auf Android

    
Maxim Shoustin 16.10.2017, 17:10
quelle
6

Das Ereignis keypress wird nicht ausgelöst, nur keydown und keyup . onkeydown Sie können die Methode preventDefault() aufrufen. Aber was zu verhindern? charCode ist immer 0 und keyCode ist 229 . Sie sollten alle Eingaben überprüfen.

In etwa so:

%Vor%     
Zoryana 10.07.2017 14:14
quelle
1

benutze inputType="numberSigned" es wird dir nur Zahlen zwischen 0-9 geben, mindestens in nativen Android funktioniert es einwandfrei.

    
geekx 10.10.2017 11:29
quelle