This jsfiddle demonstrates the following issue.giá trị Nhận của <input type = "number"> với JS khi nó chứa các ký tự không phải số
Ví dụ đơn giản nhất là:
<input id="number" type="number" value="1">
console.log(document.getElementById('number').value);
này ghi 1 như mong đợi. Tuy nhiên, điều này:
<input id="number" type="number" value="1A">
console.log(document.getElementById('number').value);
Chỉ cần ghi một chuỗi rỗng '', vì ký tự không phải là số trong giá trị. Một số thiết bị + trình duyệt (ví dụ: Chrome) cho phép bạn nhập các ký tự không phải số vào các đầu vào này.
Điều này gây phiền toái vì tôi muốn đầu vào loại = "số" cho các thiết bị hỗ trợ nó (ví dụ: iPhone, bàn phím số iPad). Tuy nhiên tôi muốn sử dụng javascript để ngăn chặn đầu vào bẩn từ đang được nhập - yêu cầu tìm nạp giá trị trên khóa - sau đó regex thay thế các ký tự không phải là số.
Dường như phương thức .val() của jQuery đưa ra kết quả tương tự.
Không ngăn người dùng nhập, điều này rất khó chịu. Kiểm tra giá trị trên khóa và nếu giá trị không hợp lệ, hãy hiển thị thông báo không phô trương để cho người dùng biết rằng giá trị không hợp lệ và để họ tự khắc phục. Bạn chỉ quan tâm rằng đó là một giá trị hợp lệ khi được gửi đến máy chủ, trong khi đó giá trị có thể là bất cứ điều gì. Ồ, và Firefox sẽ hiển thị giá trị như đã nhập. – RobG
Có inputefields chỉ có 'type = number' trên thiết bị iOS, nếu bạn muốn phương thức nhập – olsn
Tại sao bạn cần giá trị? Bạn có thể biết những gì sẽ được chèn từ các sự kiện bàn phím. –