Saya sedang membangun aplikasi web yang terutama untuk browser seluler. Saya menggunakan bidang input dengan tipe angka, jadi (kebanyakan) browser seluler hanya memanggil papan tombol angka untuk pengalaman pengguna yang lebih baik. Aplikasi web ini terutama digunakan di daerah di mana pemisah desimal koma, bukan titik, jadi saya perlu menangani kedua pemisah desimal.
Bagaimana cara menutupi seluruh kekacauan ini dengan titik dan koma?
Temuan saya:
Chrome Desktop
- Jenis input = angka
- Pengguna memasukkan "4,55" ke kolom input
$("#my_input").val();
mengembalikan "455"- Saya tidak bisa mendapatkan nilai yang benar dari input
Firefox Desktop
- Jenis input = angka
- Pengguna memasukkan "4,55" ke kolom input
$("#my_input").val();
mengembalikan "4,55"- Baiklah, saya bisa mengganti koma dengan titik dan mendapatkan float yang benar
Browser Android
- Jenis input = angka
- Pengguna memasukkan "4,55" ke kolom input
- Ketika input kehilangan fokus, nilai terpotong menjadi "4"
- Membingungkan bagi pengguna
Windows Phone 8
- Jenis input = angka
- Pengguna memasukkan "4,55" ke kolom input
$("#my_input").val();
mengembalikan "4,55"- Baiklah, saya bisa mengganti koma dengan titik dan mendapatkan float yang benar
Apa "praktik terbaik" dalam situasi seperti ini ketika pengguna dapat menggunakan koma atau titik sebagai pemisah desimal dan saya ingin mempertahankan tipe input html sebagai angka, untuk memberikan pengalaman pengguna yang lebih baik?
Dapatkah saya mengonversi koma ke titik "on the fly", mengikat acara utama, apakah itu berfungsi dengan input angka?
EDIT
Currenlty Saya tidak punya solusi, bagaimana mendapatkan nilai float (sebagai string atau angka) dari input yang jenisnya diatur ke angka. Jika pengguna akhir memasukkan "4,55", Chrome selalu kembali "455", Firefox mengembalikan "4,55" yang baik-baik saja.
Juga cukup menjengkelkan bahwa di Android (diuji emulator 4.2), ketika saya memasukkan "4,55" ke kolom input dan mengubah fokus ke tempat lain, nomor yang dimasukkan terpotong menjadi "4".
var number = $(...).get(0).valueAsNumber;
if (isNaN(number)) number = parseFloat($(...).val().replace(',', '.');
Tapi solusi itu hanya berfungsi jika nomor yang dimasukkan hanya berisi 1 koma dan tidak ada titik tambahan ...
.val()
, dan Android melakukan sesuatu yang aneh. Bisakah Anda memeriksa apakah mereka berperilaku sama ketika Anda mengatur bahasa sistem ke sesuatu yang sesuai?