Tôi đang xây dựng ứng dụng web chủ yếu dành cho trình duyệt di động. Tôi đang sử dụng các trường đầu vào với loại số, vì vậy (hầu hết) các trình duyệt di động chỉ gọi bàn phím số để có trải nghiệm người dùng tốt hơn. Ứng dụng web này chủ yếu được sử dụng ở các khu vực có dấu tách thập phân là dấu phẩy, không phải dấu chấm, vì vậy tôi cần xử lý cả dấu tách thập phân.
Làm thế nào để che toàn bộ mớ hỗn độn này bằng dấu chấm và dấu phẩy?
Phát hiện của tôi:
Máy tính để bàn Chrome
- Kiểu đầu vào = số
- Người dùng nhập "4,55" vào trường nhập
$("#my_input").val();
trả về "455"- Tôi không thể nhận được giá trị chính xác từ đầu vào
Máy tính để bàn Firefox
- Kiểu đầu vào = số
- Người dùng nhập "4,55" vào trường nhập
$("#my_input").val();
trả về "4,55"- Đó là tốt, tôi có thể thay thế dấu phẩy bằng dấu chấm và có được float chính xác
Trình duyệt Android
- Kiểu đầu vào = số
- Người dùng nhập "4,55" vào trường nhập
- Khi đầu vào mất tiêu điểm, giá trị bị cắt ngắn thành "4"
- Nhầm lẫn với người dùng
Windows Phone 8
- Kiểu đầu vào = số
- Người dùng nhập "4,55" vào trường nhập
$("#my_input").val();
trả về "4,55"- Đó là tốt, tôi có thể thay thế dấu phẩy bằng dấu chấm và có được float chính xác
"Thực tiễn tốt nhất" trong loại tình huống này là gì khi người dùng có thể sử dụng dấu phẩy hoặc dấu chấm làm dấu tách thập phân và tôi muốn giữ loại đầu vào html dưới dạng số, để cung cấp trải nghiệm người dùng tốt hơn?
Tôi có thể chuyển đổi dấu phẩy thành dấu chấm "đang hoạt động", ràng buộc các sự kiện chính, nó có hoạt động với đầu vào số không?
BIÊN TẬP
Currenlty Tôi không có bất kỳ giải pháp nào, làm thế nào để có được giá trị float (dưới dạng chuỗi hoặc số) từ đầu vào loại nào được đặt thành số. Nếu enduser nhập "4,55", Chrome luôn trả về "455", Firefox trả về "4,55" là ổn.
Ngoài ra, điều khá khó chịu là trong Android (trình giả lập 4.2 đã được thử nghiệm), khi tôi nhập "4,55" vào trường nhập và thay đổi tiêu điểm sang một nơi khác, số đã nhập bị cắt ngắn thành "4".
var number = $(...).get(0).valueAsNumber;
if (isNaN(number)) number = parseFloat($(...).val().replace(',', '.');
Nhưng giải pháp đó chỉ hoạt động nếu số đã được đặt chỉ chứa 1 dấu phẩy và không có dấu chấm thừa ...
.val()
và Android làm điều gì đó kỳ lạ. Bạn có thể kiểm tra xem chúng có hoạt động giống nhau không khi bạn đặt ngôn ngữ hệ thống thành thứ gì đó phù hợp?