2011-10-17 35 views

Trả lời

11

Tôi đã chơi một chút với điều này và xem thông số kỹ thuật. Nó nói rằng nó phải là một số dấu chấm động hợp lệ. Có một câu trong definition of a valid floating point number nó mang lại mà tôi chú ý:

Các đại diện tốt nhất của các số n như là một điểm số nổi là chuỗi thu được từ việc áp dụng các nhà điều hành ToString hoạt Javascript để n.

Điều này có nghĩa là định dạng sẽ luôn phù hợp với việc đánh giá số đó là gì, sau đó sử dụng JavaScript toString trên số đó. Vì vậy, không có dấu 0 sau đó.

Vì vậy, bạn sẽ phải sử dụng JavaScript. Điều này không đơn giản vì document.getElementById('numInput').value = '0.50'; vẫn được chỉnh sửa thành 0.5, do đó xác thực không được kích hoạt tại onchange nơi hành động mặc định có thể được ngăn chặn, nó được kích hoạt nội bộ.

Đây là giải pháp tốt nhất mà tôi có thể đưa ra ... đó là một chút của một hack, và sẽ cần một chút tinh chỉnh cho vững mạnh, nhưng hy vọng nó sẽ làm những gì bạn muốn:

var numInput = document.getElementById('numInput'); 
numInput.addEventListener('keypress', function() { 
    this.setAttribute('type', 'text'); 
}); 
numInput.addEventListener('click', function() { 
    this.setAttribute('type', 'number'); 
}); 

Vì vậy, nếu người dùng muốn nhập số bằng cách nhập, nó sẽ chuyển loại đầu vào thành văn bản, nhưng khi họ nhấp vào nó, nó sẽ chuyển đổi nó thành một số.

Nếu bạn luôn muốn 0s trailing không có vấn đề gì loại người dùng, sau đó bạn có thể làm điều đó một cái gì đó như thế này:

var numInput = document.getElementById('numInput'); 
numInput.addEventListener('blur', function() { 
    if (this.value === '') { 
     return; 
    } 
    this.setAttribute('type', 'text'); 
    if (this.value.indexOf('.') === -1) { 
     this.value = this.value + '.00'; 
    } 
    while (this.value.indexOf('.') > this.value.length - 3) { 
     this.value = this.value + '0'; 
    } 
}); 
numInput.addEventListener('focus', function() { 
    this.setAttribute('type', 'number'); 
}); 

Edit: Tôi nghĩ rằng giải pháp thứ hai là inline hơn với những gì người dùng có thể mong đợi, nhưng điều đó có nghĩa là nếu người dùng nhập 0.5 nó sẽ bị ép buộc 0.50, do đó, nó phụ thuộc nếu đó là những gì bạn muốn.

+0

Thats một cách rất thông minh để giải quyết nó bằng cách điều chỉnh số thập phân và chuyển đổi giữa các trường văn bản và số. Cảm ơn! – Akshat

+3

Vui vì bạn thích nó. Đây là IMO một thiếu sót trong spec HTML5, vì vậy hy vọng ai đó sẽ nhận ra điều này và sửa chữa nó tại một số điểm trong tương lai. –

+0

Giải pháp tốt. Tôi mở rộng nó một chút để chỉ ảnh hưởng đến đầu vào được chỉ định và cũng đã sử dụng sự kiện 'thay đổi' để làm cho nó giữ lại các số 0 sau khi bạn nhấn các nút đầu vào. Không biết tại sao nó không hoạt động với JS 'onchange' đơn giản, vì vậy tôi đã làm nó trong JQuery. Chỉ được thử nghiệm trên Chrome: '$ ('input.float'). Mỗi (hàm (chỉ mục) { \t $ (this).thay đổi (function (event) { \t \t if (this.value === '') { \t \t \t trở lại; \t \t} \t \t if (this.value.indexOf ('') === -1) { \t \t \t this.value = this.value + '.00 '; \t \t} \t \t while (this.value.indexOf ('.')> this.value.length - 3) { \t \t \t this.value = this.val ue + '0'; \t \t} \t}); }); ' – YOMorales

9

I kèm theo một trên ('thay đổi') sự kiện vào đầu vào bạn muốn có đuôi 0 của

$('.number-input').on('change', function(){ 
    $(this).val(parseFloat($(this).val()).toFixed(2)); 
}); 

Nó chỉ mất giá trị, phôi nó vào một float, làm cho nó vào một chuỗi các số số thập phân và đặt nó trở lại làm giá trị.

+0

Giải pháp ngắn gọn cho những người đã sử dụng jQuery – Mikey

+3

Đây là một giải pháp tuyệt vời cho một vấn đề không nên tồn tại. –

+5

hoạt động trong chrome nhưng dường như không hoạt động trong firefox – WebChemist

Các vấn đề liên quan