Tại sao Firebug nói toFixed () không phải là một hàm?


93

Tôi đang sử dụng jQuery 1.7.2 và jQuery UI 1.9.1. Tôi đang sử dụng mã bên dưới trong một thanh trượt. (http://jqueryui.com/slider/)

Tôi có một hàm cần kiểm tra hai giá trị và tùy thuộc vào sự khác biệt giữa hai giá trị mà định dạng lại chúng (thành chữ số thập phân thích hợp). Nếu sự khác biệt lớn hơn 10, tôi sẽ phân tích cú pháp số nguyên. Nếu sự khác biệt lớn hơn 5, nó nên giữ một số thập phân. Mọi thứ khác, tôi sẽ giữ hai số thập phân.

Khi tôi nhập hai giá trị có sự khác biệt từ mười trở xuống, tôi sử dụng hàm toFixed (). Và, trong Firebug, tôi gặp lỗi:

TypeError: Low.toFixed is not a function
Low = Low.toFixed(2);

Có điều gì đó đơn giản mà tôi đang làm sai?

Đây là mã của tôi:

var Low = $SliderValFrom.val(),
High = $SliderValTo.val();

// THE NUMBER IS VALID
if (isNaN(Low) == false && isNaN(High) == false) {
    Diff = High - Low;
if (Diff > 10) {
      Low = parseInt(Low);  
  High = parseInt(High);    
} else if (Diff > 5) {
       Low = Low.toFixed(1);
       High = High.toFixed(1);
} else {
       Low = Low.toFixed(2);
   High = High.toFixed(2);
}
}

Tôi có cùng một vấn đề. nhưng ở địa phương công việc của nó. khi trong live nó hiển thị lỗi - Lỗi Loại: value.sell_price.toFixed không phải là một chức năng
Mizanur Rahman

Câu trả lời:


175

toFixedkhông phải là một phương pháp của các kiểu biến không phải là số. Nói cách khác, LowHighkhông thể sửa được vì khi bạn nhận giá trị của một thứ gì đó trong Javascript, nó sẽ tự động được đặt thành kiểu chuỗi. Việc sử dụng parseFloat()(hoặc parseInt()với cơ số, nếu là số nguyên) sẽ cho phép bạn chuyển đổi các loại biến khác nhau thành số sẽ cho phép toFixed()hàm hoạt động.

var Low  = parseFloat($SliderValFrom.val()),
    High = parseFloat($SliderValTo.val());

bạn quên dấu ngoặc đơn và dấu ngoặc kép sau dấu $ phải không?
Ari Waisberg

1
@AriWais $SliderValFromlà tên biến được sử dụng bởi các OP, không phải là một chức năng
jeremy

@jeremy bạn nói đúng, tôi đã không chú ý đến bài đăng gốc ... Tôi chỉ nói với những người tìm kiếm thẳng vào giải pháp parseFloat của nó ($ ('slide'). val ())
Ari Waisberg

91

Đó là bởi vì Lowlà một chuỗi.

.toFixed() chỉ hoạt động với một số.


Hãy thử làm:

Low = parseFloat(Low).toFixed(..);

Đã sửa lỗi của tôi, Cảm ơn. Sự cố này gặp phải trong trình duyệt firefox.
ShivarajRH

26

Low là một chuỗi.

.toFixed() chỉ hoạt động với một số.

Một cách đơn giản để khắc phục vấn đề này là sử dụng kiểu cưỡng chế :

Low = (Low*1).toFixed(..);

Phép nhân với 1 buộc mã để chuyển chuỗi thành số và không thay đổi giá trị. Mã JSFiddle tại đây .


1
Lưu một ký tự với (+ Thấp) .toFixed (..): P
Frank

2

Bạn cần chuyển đổi sang loại số:

(+Low).toFixed(2)

0

Trong một hàm, hãy sử dụng như

render: function (args) {
    if (args.value != 0)
        return (parseFloat(args.value).toFixed(2));


},
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.