Cách buộc bàn phím với số trong trang web dành cho thiết bị di động trong Android


91

Tôi có một trang web dành cho thiết bị di động và nó có một số inputphần tử HTML trong đó, như sau:

<input type="text" name="txtAccessoryCost" size="6" />

Tôi đã nhúng trang web vào một WebViewứng dụng Android 2.1 để có thể sử dụng, để nó cũng sẽ là một ứng dụng Android.

Có thể nhận được bàn phím với các số thay vì bàn phím mặc định có các chữ cái khi inputphần tử HTML này được đặt tiêu điểm không?

Hoặc, có thể đặt nó cho toàn bộ ứng dụng (có thể là một cái gì đó trong tệp Manifest ), nếu nó không khả thi cho một phần tử HTML?


Nếu muốn có bàn phím số trên iOS ngoài Android, bạn nên thực hiện điều này: stackoverflow.com/a/31619311/806956
Aaron Grey

2
Các inputmode="number"thuộc tính có vẻ như câu trả lời đúng vào cuối năm 2019: developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/... . Câu trả lời được bình chọn cao nhất tại thời điểm bình luận này cho thấy type="number", đi kèm với một số cạm bẫy của riêng nó; inputmodedường như chỉ tác động đến màn hình bàn phím ảo chứ không phải hành vi / ràng buộc của chính đầu vào.
SheffDoinWork

Câu trả lời:


112
<input type="number" />
<input type="tel" />

Cả hai đều hiển thị bàn phím số khi đầu vào được lấy nét.

<input type="search" /> hiển thị bàn phím bình thường có thêm nút tìm kiếm

Mọi thứ khác dường như mang đến bàn phím tiêu chuẩn.


Sẽ xem xét nó ngày hôm nay và sau đó sẽ cho bạn biết nếu điều đó có hiệu quả. Cảm ơn bạn, Richard!
ncakmak

1
Chào Richard. Không có gì hoạt động, trường nhập liệu vẫn đang mở bàn phím tiêu chuẩn.
ncakmak


1
Lưu ý rằng bàn phím for type="tel"kém hơn để gõ số so với bàn phím for type="number".
Rory O'Kane

2
<input type="text" pattern="\d*" /> cũng hiển thị bàn phím số, nhưng chỉ trên iOS, không phải trên Android .
Rory O'Kane

50

LƯU Ý QUAN TRỌNG

Tôi đăng bài này như một câu trả lời, không phải một bình luận, vì nó là thông tin khá quan trọng và nó sẽ thu hút nhiều sự chú ý hơn ở định dạng này.

Như các nghiên cứu sinh khác đã chỉ ra, bạn có thể buộc thiết bị hiển thị cho bạn bàn phím số bằng type="number"/ type="tel", nhưng tôi phải nhấn mạnh rằng bạn phải cực kỳ thận trọng với điều này.

Nếu ai đó mong đợi một số bắt đầu bằng các số không, chẳng hạn như 000222, thì họ có thể gặp sự cố, vì một số trình duyệt (ví dụ: Chrome dành cho máy tính để bàn) sẽ gửi đến máy chủ222 , đây không phải là điều họ muốn.

Về type="tel"tôi không thể nói bất cứ điều gì tương tự nhưng cá nhân tôi không sử dụng nó, vì hành vi của nó trên các điện thoại khác nhau có thể khác nhau. Tôi đã tự giới hạn mình trong những thứ đơn giản pattern="[0-9]*"không hoạt động trong Android


4
Việc định dạng lại tự động có thể không xảy ra với type="tel". Đặc tả ghi chú telkhông thực thi bất kỳ cú pháp cụ thể nào, không giống như number, yêu cầu giá trị của nó là một số dấu phẩy động hợp lệ .
Rory O'Kane

Thực hư ra sao? Chúng tôi đang cố gắng tăng tốc quá trình biểu mẫu cho khách hàng di động của mình và đây có vẻ như là một giải pháp hiển nhiên, nhưng chúng tôi cũng muốn một thứ gì đó đáng tin cậy. Bạn đã đăng một cảnh báo mạnh mẽ chống lại việc sử dụng phương pháp này. Tôi tự hỏi nếu bạn có thể giải thích thêm một chút về điều đó?
Philll_t

@Philll_t, người dùng cần gửi dữ liệu '000222', nhưng thay vào đó, bạn ở phía máy chủ nhận được '222'. Bạn không thấy rằng chức năng đã hoàn toàn bị hỏng? Máy chủ nhận dữ liệu sai.
user907860

Vâng, tôi hiểu ý bạn, nhưng điều tôi đang nói là: bao nhiêu phần trăm người dùng thấy điều này? Đây có phải là sự cố trên các trình duyệt di động chính như Safari và Chrome không? Làm thế nào để bạn biết đây là một vấn đề, có một liên kết bạn có thể cung cấp. Tôi tin bạn, tôi chỉ muốn tự nghiên cứu và chưa thấy điều gì gợi ý điều này, có thể bạn chỉ cho tôi hướng đi đúng đắn. Chúng tôi chỉ đang cố gắng xem liệu cơ sở khách hàng của chúng tôi có được hưởng lợi từ điều này hay không.
Philll_t

1
@Philll_t Tôi nghĩ ví dụ tốt nhất cho cảnh báo này là cho các trường nhập Ngày sinh. Nơi bạn cần nhập thủ công ngày, tháng và năm. Và vâng, vẫn còn rất nhiều trang web sử dụng kiểu này thay vì các công cụ chọn ngày thường được sử dụng. Về vấn đề trên các trường nhập Ngày sinh, là khi bạn nhập Ngày hoặc Tháng của mình bắt đầu bằng "0", ví dụ: 08.
Robin Carlo Catacutan 17/08/17

8

Điều này sẽ hoạt động. Nhưng tôi gặp vấn đề tương tự trên điện thoại Android.

<input type="number" /> <input type="tel" />

Tôi phát hiện ra rằng nếu tôi không bao gồm jquerymobile-framework, thì bàn phím sẽ hiển thị chính xác trên hai loại trường.

Nhưng tôi vẫn chưa tìm ra giải pháp để giải quyết vấn đề đó, nếu bạn thực sự cần sử dụng jquerymobile.

CẬP NHẬT: Tôi phát hiện ra rằng nếu thẻ biểu mẫu được lưu trữ ngoài

<div data-role="page"> 

Bàn phím số không được hiển thị. Đây hẳn là một lỗi ...


Cảm ơn vì đã đào sâu vào điều này. Mặc dù vậy, tôi không chắc mình hiểu: "nếu thẻ biểu mẫu được lưu trữ ngoài div [data-role = page]". Trong trường hợp của tôi, sự cố xảy ra với các biểu mẫu được lồng vào nhau bên trong một div [data-role = page]. Có lẽ vấn đề là các trang này đang được hiển thị, trong trường hợp của tôi, dưới dạng hộp thoại?
Wytze


2

Một số trình duyệt igoners gửi số 0 đứng đầu đến máy chủ khi loại đầu vào là "số". Vì vậy, tôi sử dụng kết hợp jquery và html để tải bàn phím số và cũng đảm bảo rằng giá trị được gửi dưới dạng văn bản chứ không phải số:

$(document).ready(function(){
$(".numberonly").focus(function(){$(this).attr("type","number")});
$(".numberonly").blur(function(){$(this).attr("type","text")});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="numberonly">


3
Điều này gây ra sự cố khó chịu trên Chrome dành cho Android. Khi bạn gõ vào đầu vào, bàn phím không xuất hiện. Sau đó, bạn phải nhấn vào hộp văn bản lần thứ hai và khi đó bàn phím sẽ xuất hiện với bàn phím chỉ số. Tôi thực sự ước chúng tôi có một type="digits"tùy chọn để chúng tôi không phải có những bản hack này. Ý tôi là, nó không giống như số 0 ở đầu là hiếm (Mã Zip ở Mỹ là một ví dụ rõ ràng).
Jaxidian

2
Tôi cũng phải đối mặt với vấn đề tương tự! đặt trường thành "type = tel" là giải pháp tốt nhất.
Ali Sheikhpour 13/09/17

-2

input type = number

Khi bạn muốn cung cấp đầu vào số, bạn có thể sử dụng giá trị thuộc tính kiểu đầu vào HTML5 = "number".

<input type="number" name="n" />

Đây là bàn phím xuất hiện trên iPhone 4:

Ảnh chụp màn hình iPhone về số kiểu nhập HTML5 Android 2.2 sử dụng bàn phím này cho kiểu = số:

Ảnh chụp màn hình của Android về số loại đầu vào HTML5


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.