Ich baue eine Web-App, die hauptsächlich für mobile Browser ist. Ich verwende Eingabefelder mit Nummerntyp, daher rufen (die meisten) mobilen Browser zur besseren Benutzererfahrung nur die Zifferntastatur auf. Diese Web-App wird hauptsächlich in Regionen verwendet, in denen das Dezimaltrennzeichen ein Komma und kein Punkt ist. Daher muss ich beide Dezimaltrennzeichen verarbeiten.
Wie kann man dieses ganze Durcheinander mit Punkt und Komma abdecken?
Meine Ergebnisse:
Desktop Chrome
- Eingabetyp = Nummer
- Der Benutzer gibt "4,55" in das Eingabefeld ein
$("#my_input").val();
gibt "455" zurück- Ich kann nicht den richtigen Wert von der Eingabe erhalten
Desktop Firefox
- Eingabetyp = Nummer
- Der Benutzer gibt "4,55" in das Eingabefeld ein
$("#my_input").val();
gibt "4,55" zurück- Das ist in Ordnung, ich kann Komma durch Punkt ersetzen und den richtigen Float erhalten
Android-Browser
- Eingabetyp = Nummer
- Der Benutzer gibt "4,55" in das Eingabefeld ein
- Wenn die Eingabe den Fokus verliert, wird der Wert auf "4" gekürzt.
- Verwirrend für den Benutzer
Windows Phone 8
- Eingabetyp = Nummer
- Der Benutzer gibt "4,55" in das Eingabefeld ein
$("#my_input").val();
gibt "4,55" zurück- Das ist in Ordnung, ich kann Komma durch Punkt ersetzen und den richtigen Float erhalten
Was sind die "Best Practices" in solchen Situationen, in denen der Benutzer möglicherweise Komma oder Punkt als Dezimaltrennzeichen verwendet und ich den HTML-Eingabetyp als Zahl beibehalten möchte, um eine bessere Benutzererfahrung zu erzielen?
Kann ich Komma "on the fly" in Punkt umwandeln, um Schlüsselereignisse zu binden? Funktioniert es mit Zahleneingaben?
BEARBEITEN
Derzeit habe ich keine Lösung, wie man den Gleitkommawert (als Zeichenfolge oder Zahl) von der Eingabe erhält, deren Typ auf Zahl gesetzt ist. Wenn der Endbenutzer "4,55" eingibt, gibt Chrome immer "455" zurück, Firefox gibt "4,55" zurück, was in Ordnung ist.
Es ist auch ziemlich ärgerlich, dass in Android (getesteter 4.2-Emulator) die eingegebene Zahl auf "4" gekürzt wird, wenn ich "4,55" in das Eingabefeld eingebe und den Fokus auf eine andere Stelle ändere.
var number = $(...).get(0).valueAsNumber;
if (isNaN(number)) number = parseFloat($(...).val().replace(',', '.');
Aber diese Lösung funktioniert nur, wenn das Die
.val()
und Android macht etwas Seltsames. Können Sie überprüfen, ob sie sich gleich verhalten, wenn Sie die Systemsprache auf einen geeigneten Wert einstellen?