Có loại đầu vào float trong HTML5 không?


818

Theo html5.org , thuộc tính giá trị "kiểu số", nếu được chỉ định và không trống, phải có giá trị là số dấu phẩy động hợp lệ. "

Tuy nhiên, đơn giản là (trong phiên bản mới nhất của Chrome, dù sao), một điều khiển "cập nhật" với số nguyên, không nổi:

<input type="number" id="totalAmt"></input>

Có phần tử đầu vào dấu phẩy động nào có nguồn gốc từ HTML5 hay cách để làm cho kiểu đầu vào số hoạt động với số float chứ không phải ints? Hoặc tôi phải dùng đến một plugin UI UI?

Câu trả lời:


1662

Các numberloại có một stepgiá trị kiểm soát mà con số này là hợp lệ (cùng với maxmin), mặc định là 1. Giá trị này cũng được sử dụng bởi các cài đặt cho các nút bước (tức là nhấn lên tăng theo step).

Đơn giản chỉ cần thay đổi giá trị này thành bất cứ điều gì là phù hợp. Đối với tiền, hai vị trí thập phân có thể được dự kiến:

<input type="number" step="0.01">

(Tôi cũng đặt min=0nếu nó chỉ có thể tích cực)

Nếu bạn muốn cho phép bất kỳ số vị trí thập phân nào, bạn có thể sử dụng step="any"(mặc dù đối với tiền tệ, tôi khuyên bạn nên sử dụng 0.01). Trong Chrome & Firefox, các nút bước sẽ tăng / giảm 1 khi sử dụng any. (cảm ơn câu trả lời của Michal Stefanow đã chỉ ra anyxem thông số kỹ thuật có liên quan ở đây )

Đây là một sân chơi cho thấy các bước khác nhau ảnh hưởng đến các loại đầu vào khác nhau như thế nào:

<form>
  <input type=number step=1 /> Step 1 (default)<br />
  <input type=number step=0.01 /> Step 0.01<br />
  <input type=number step=any /> Step any<br />
  <input type=range step=20 /> Step 20<br />
  <input type=datetime-local step=60 /> Step 60 (default)<br />
  <input type=datetime-local step=1 /> Step 1<br />
  <input type=datetime-local step=any /> Step any<br />
  <input type=datetime-local step=0.001 /> Step 0.001<br />
  <input type=datetime-local step=3600 /> Step 3600 (1 hour)<br />
  <input type=datetime-local step=86400 /> Step 86400 (1 day)<br />
  <input type=datetime-local step=70 /> Step 70 (1 min, 10 sec)<br />
</form>


Như thường lệ, tôi sẽ thêm một ghi chú nhanh: hãy nhớ rằng xác thực phía máy khách chỉ là sự tiện lợi cho người dùng. Bạn cũng phải xác nhận về phía máy chủ!


1
Để trả lời chỉnh sửa của @ Elfayer: các trích dẫn là tùy chọn trong HTML trừ khi bạn muốn sử dụng một số ký tự nhất định. Cá nhân tôi thích bỏ qua chúng khi có thể để dễ đọc hơn.
Dave

5
Điều này không hoạt động chính xác trong các phiên bản mới nhất của Firefox: bugzilla.mozilla.org/show_orms.cgi?id=1003896
trpt4him

7
@Dave: Vâng, về mặt kỹ thuật, bỏ qua các trích dẫn là tốt, bit nó giới thiệu một loạt các vấn đề tiềm năng. Đầu tiên, một tập hợp các ký tự được xử lý khác nhau trong các trình duyệt và phiên bản khác nhau. Nếu bạn chọn không sử dụng dấu ngoặc kép, thì bạn phải liên tục nhận thức được các ký tự nào sẽ gây ra sự cố trong mỗi trình duyệt và phiên bản. Đó là rất nhiều sức mạnh tinh thần dành cho một cái gì đó không cần thiết phải lo lắng nếu bạn chỉ sử dụng dấu ngoặc kép. (tiếp)
Chris Pratt

9
Thứ hai, trong khi bạn có thể ổn với việc lo lắng về các quy tắc nhân vật nào ổn và không, thì nhà phát triển đứng sau bạn có lẽ sẽ không như vậy. Điều đó sau đó yêu cầu họ phải chịu đựng nhiệm vụ khó khăn là thêm dấu ngoặc kép vào tất cả các thuộc tính bạn để lại không được trích dẫn hoặc tệ hơn, chỉ cần đưa các vấn đề vào mã mà họ thậm chí không thể hiểu được nguồn. Cuối cùng, vì đôi khi bạn sẽ phải sử dụng dấu ngoặc kép, mã sau đó trông không nhất quán với một số thuộc tính được trích dẫn và các thuộc tính khác thì không.
Chris Pratt

2
@relipse xem tại đây: stackoverflow.com/q/3790935/1180785 nhưng hãy chắc chắn đọc các bình luận cho mỗi câu trả lời; có vẻ như tất cả các tùy chọn đều có nhược điểm và bạn sẽ cần xem những gì phù hợp với nhu cầu cụ thể của bạn.
Dave

153

Qua: http://blog.isotoma.com/2012/03/html5-input-typenumber-and-decimalsfloats-in-chrom/

Nhưng nếu bạn muốn tất cả các số là hợp lệ, số nguyên và số thập phân giống nhau thì sao? Trong trường hợp này, hãy đặt bước tới bất kỳ người nào

<input type="number" step="any" />

Hoạt động với tôi trong Chrome, không được thử nghiệm trong các trình duyệt khác.


4
Chrome => Hoạt động hoàn hảo Safari => Sẽ không hiển thị thông báo lỗi và nếu không đánh số, nó sẽ không chuyển đến máy chủ IE => Phiên bản dưới 10 không, hoạt động
Abhi

4
Thật không may trong chrome, nó cho phép bạn nhập nhiều điểm thập phân, ví dụ như một địa chỉ IP.
Andy

18

Bạn có thể dùng:

<input type="number" step="any" min="0" max="100" value="22.33">

12

Bạn có thể sử dụng thuộc tính bước cho số loại đầu vào:

<input type="number" id="totalAmt" step="0.1"></input>

step="any"sẽ cho phép bất kỳ số thập phân.
step="1"sẽ không cho phép số thập phân.
step="0.5"sẽ cho phép 0,5; 1; 1,5; ...
step="0.1"sẽ cho phép 0,1; 0,2; 0,3; 0,4; ...


8

Dựa trên câu trả lời này

<input type="text" id="sno" placeholder="Only float with dot !"   
   onkeypress="return (event.charCode >= 48 && event.charCode <= 57) ||  
   event.charCode == 46 || event.charCode == 0 ">

Ý nghĩa :

Mã Char:

  • 48-57 bằng 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • 0 là Backspace(nếu không cần trang làm mới trên Firefox)
  • 46 là dot

&&AND, ||ORtoán tử.

nếu bạn thử thả nổi bằng dấu phẩy:

<input type="text" id="sno" placeholder="Only float with comma !"   
     onkeypress="return (event.charCode >= 48 && event.charCode <= 57) ||  
     event.charCode == 44 || event.charCode == 0 ">

Chromium và Firefox được hỗ trợ (Linux X64) (các trình duyệt khác tôi không tồn tại.)


Cảm thấy lạc hậu. Làm thế nào về sao chép và dán trong lĩnh vực này?
Mars Robertson


4
Hack cho đầu vào, hack để sao chép và dán, hack trên đầu trang của một hack = thực hành xấu. Chúng ta có 2017
Mars Robertson

Bạn đọc mật khẩu ở đâu? Ai quan tâm sử dụng phương pháp nào sau một phiên? Không, chúng tôi có 1856! Hãy thử một người dùng khác!
dsgdfg

Nghe có vẻ quá phức tạp, nhưng, lý do về phương pháp này so với các đề cập khác không được cung cấp
WebDude0482

6

tôi làm như vậy

 <input id="relacionac" name="relacionac" type="number" min="0.4" max="0.7" placeholder="0,40-0,70" class="form-control input-md" step="0.01">

sau đó, tôi xác định min trong 0,4 và tối đa 0,7 với bước 0,01: 0,4, 0,41, 0,42 ... 0,7


4

Tôi chỉ có cùng một vấn đề, và tôi có thể sửa chữa nó bằng cách chỉ đặt một dấu phẩy và không phải là một khoảng thời gian / full stop trong số vì nội địa hóa Pháp .

Vì vậy, nó hoạt động với:

2 là ổn

2,5 là OK

2.5 là KO (Số được coi là "bất hợp pháp" và bạn nhận được giá trị trống).


3
thêm lang = "en" vào đầu vào hoặc bất kỳ cha mẹ nào và nó sẽ bắt đầu sử dụng kiểu số tiếng Anh
user1040495
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.