2010-09-16 47 views
13

Tôi đang cố gắng để định dạng các giá trị người dùng nhập vào sử dụng kỹ thuật sau đây, nhưng tôi nhận được lỗi sau trên Bug cháy consoleJavascript toFixed() chức năng

$ (this) .val(). ToFixed không phải là một chức năng

$(".amount-text").bind('change',function() { 
    $(this).val(($(this).val()).toFixed(2)); 
}); 

Ai đó có thể giúp tôi về điều này không?

Trả lời

29

.val() trả về một chuỗi, sử dụng .toFixed() về một số bạn sẽ cần phải phân tích nó thành một Số đầu tiên, như thế này:

$(".amount-text").bind('change',function() { 
    $(this).val(parseFloat($(this).val()).toFixed(2)); 
}); 

Hoặc với jQuery 1.4+, một chút bụi, ít nhất là để me use a function with .val():

$(".amount-text").bind('change',function() { 
    $(this).val(function(i, v) { return parseFloat(v).toFixed(2); }); 
}); 

You can give it a try here.

+1

+1 để sử dụng chức năng - trông dễ đọc hơn nhiều đối với tôi. – DMI

+0

Khi tôi sử dụng hàm, nó trả về một đối tượng. – Keyslinger

6

toFixed chỉ hoạt động trên một số, phân tích giá trị cho một số đầu tiên:

$(this).val(parseFloat($(this).val()).toFixed(2)); 
1

Điều này là do val() trả về một String chứ không phải là một Number. Để có thể sử dụng toFixed(), làm điều gì đó như:

$(".amount-text").bind('change',function() { 
    $(this).val((parseFloat($(this).val())).toFixed(2)); 
}); 

hoặc thậm chí:

$(".amount-text").bind('change',function() { 
    $(this).val((new Number($(this).val())).toFixed(2)); 
}); 

Bạn cũng có thể làm điều đó một chút hackily hơn như:

$(".amount-text").bind('change',function() { 
    $(this).val((0 + $(this).val()).toFixed(2)); 
}); 

nhưng tôi không khuyên bạn nên nó cho mục đích dễ đọc!