Tworzę aplikację internetową przeznaczoną głównie dla przeglądarek mobilnych. Używam pól wejściowych z typem liczbowym, więc (większość) przeglądarek mobilnych wywołuje tylko klawiaturę numeryczną dla lepszego doświadczenia użytkownika. Ta aplikacja internetowa jest używana głównie w regionach, w których separatorem dziesiętnym jest przecinek, a nie kropka, więc muszę obsługiwać oba separatory dziesiętne.
Jak zakryć ten cały bałagan kropką i przecinkiem?
Moje ustalenia:
Chrome na komputer
- Typ danych wejściowych = liczba
- Użytkownik wpisuje „4,55” w polu wprowadzania
$("#my_input").val();
zwraca „455”- Nie mogę uzyskać prawidłowej wartości z danych wejściowych
Firefox na komputer
- Typ danych wejściowych = liczba
- Użytkownik wpisuje „4,55” w polu wprowadzania
$("#my_input").val();
zwraca „4,55”- W porządku, mogę zastąpić przecinek kropką i uzyskać poprawny float
Przeglądarka Android
- Typ danych wejściowych = liczba
- Użytkownik wpisuje „4,55” w polu wprowadzania
- Gdy dane wejściowe tracą fokus, wartość jest obcinana do „4”
- Mylące dla użytkownika
Windows Phone 8
- Typ danych wejściowych = liczba
- Użytkownik wpisuje „4,55” w polu wprowadzania
$("#my_input").val();
zwraca „4,55”- W porządku, mogę zastąpić przecinek kropką i uzyskać poprawny float
Jakie są „sprawdzone metody” w tego rodzaju sytuacjach, gdy użytkownik może użyć przecinka lub kropki jako separatora dziesiętnego, a ja chcę, aby typ wejściowy HTML był liczbą, aby zapewnić użytkownikom lepsze wrażenia?
Czy mogę zamienić przecinek na kropkę „w locie”, wiążąc kluczowe zdarzenia, czy to działa z wejściami liczbowymi?
EDYTOWAĆ
Obecnie nie mam żadnego rozwiązania, jak uzyskać wartość zmiennoprzecinkową (jako ciąg lub liczbę) z wejścia, którego typ jest ustawiony na liczbę. Jeśli użytkownik końcowy wpisze „4,55”, Chrome zwróci zawsze „455”, Firefox zwróci „4,55”, co jest w porządku.
Dość denerwujące jest też to, że w Androidzie (testowany emulator 4.2), kiedy wpisuję „4,55” w polu wprowadzania i zmieniam fokus na gdzieś indziej, to wpisana liczba zostaje obcięta do „4”.
.val()
, a Android robi coś dziwnego. Czy możesz sprawdzić, czy zachowują się tak samo, gdy ustawisz język systemu na coś odpowiedniego?