2009-01-25 37 views

Trả lời

94

Nếu bạn đang thực hiện việc này với một số trường hoặc thực hiện thường xuyên, thì có lẽ plugin là câu trả lời.
Đây là khởi đầu của một plugin jQuery định dạng giá trị của một trường thành hai chữ số thập phân.
Nó được kích hoạt bởi sự kiện thay đổi của trường. Bạn có thể muốn một cái gì đó khác nhau.

<script type="text/javascript"> 

    // mini jQuery plugin that formats to two decimal places 
    (function($) { 
     $.fn.currencyFormat = function() { 
      this.each(function(i) { 
       $(this).change(function(e){ 
        if(isNaN(parseFloat(this.value))) return; 
        this.value = parseFloat(this.value).toFixed(2); 
       }); 
      }); 
      return this; //for chaining 
     } 
    })(jQuery); 

    // apply the currencyFormat behaviour to elements with 'currency' as their class 
    $(function() { 
     $('.currency').currencyFormat(); 
    }); 

</script> 
<input type="text" name="one" class="currency"><br> 
<input type="text" name="two" class="currency"> 
+0

Xin chào, tôi muốn biết rằng liệu chúng ta có cần một plugin khác cho currencyFormat()? .. –

+0

Điều này có hoạt động trong IE không? Tôi đã làm việc này trong chrome và FF nhưng không phải là IE ... – Rexxo

57

Có thể một cái gì đó như thế này, nơi bạn có thể chọn nhiều hơn một yếu tố nếu bạn muốn?

$("#number").each(function(){ 
    $(this).val(parseFloat($(this).val()).toFixed(2)); 
}); 
+22

Trên một mặt lưu ý, bạn không nên có id trùng lặp trong dom của mình. Cân nhắc việc thay đổi 'số' thành một lớp. – gradbot

+1

@gradbot - không có gì về điều này ngụ ý rằng có nhiều hơn một phần tử có id = "số". Có vẻ như svinto chỉ sử dụng hàm "each" như một cách để giảm số lần chuỗi ma thuật "#number" xuất hiện trong mã. Đó là một cải tiến nhỏ (và tốt, tôi nghĩ) về mã của LainMH. Nếu định dạng này chỉ cần được thực hiện trên một trang, thì đây là cách tôi muốn thực hiện. Nếu nó cần phải được nhân đôi trên nhiều trang, sau đó tôi thích phương pháp tiếp cận plugin của meouw - ngoại trừ trích xuất ra một tập tin javascript bên ngoài. –

+0

@ DanielSchilling .. Tôi cho rằng gradbot đang cố gắng nói rằng nếu bạn muốn áp dụng cùng chức năng trên nhiều hộp nhập liệu trên một trang thì bạn không thể cung cấp cùng id hoặc bạn không thể tiếp tục nhắc đến id của mỗi hộp nhập liệu như thế này ('# num1, # num2'). each (function() {}); '.Có nên sử dụng cách tiếp cận lớp tốt hơn như thế này ('.number'). each (function() {}); '.Và cung cấp cho mỗi hộp nhập liệu với một lớp phổ biến -number –

3

Chúng tôi sửa đổi chức năng Meouw được sử dụng với khóa, vì khi bạn sử dụng đầu vào, nó có thể hữu ích hơn.

Kiểm tra điều này:

Xin chào !, @heridev và tôi đã tạo một hàm nhỏ trong jQuery.

Bạn có thể thử tiếp theo:

HTML

<input type="text" name="one" class="two-digits"><br> 
<input type="text" name="two" class="two-digits">​ 

jQuery

// apply the two-digits behaviour to elements with 'two-digits' as their class 
$(function() { 
    $('.two-digits').keyup(function(){ 
     if($(this).val().indexOf('.')!=-1){   
      if($(this).val().split(".")[1].length > 2){     
       if(isNaN(parseFloat(this.value))) return; 
       this.value = parseFloat(this.value).toFixed(2); 
      } 
     }    
     return this; //for chaining 
    }); 
}); 

DEMO ONLINE:

http://jsfiddle.net/c4Wqn/

(@heridev, @vicmaster)

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