Mengapa Firebug mengatakan toFixed () bukan sebuah fungsi?


94

Saya menggunakan jQuery 1.7.2 dan jQuery UI 1.9.1. Saya menggunakan kode di bawah ini dalam slider. (http://jqueryui.com/slider/)

Saya memiliki fungsi yang harus menguji dua nilai dan tergantung pada perbedaan antara dua nilai memformatnya (ke tempat desimal yang sesuai). Jika perbedaannya lebih besar dari 10, saya akan mengurai bilangan bulat. Jika perbedaannya lebih besar dari 5, itu harus menyimpan satu desimal. Yang lainnya, saya akan menyimpan dua desimal.

Ketika saya memasukkan dua nilai yang memiliki perbedaan yaitu sepuluh atau kurang, saya menggunakan fungsi toFixed (). Dan, di Firebug, saya melihat kesalahan:

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

Apakah ada sesuatu yang sederhana yang saya lakukan salah?

Ini kode saya:

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);
}
}

Saya memiliki masalah yang sama. tetapi dalam pekerjaan lokal. ketika di hidup itu menunjukkan kesalahan - TypeError: value.sell_price.toFixed bukan fungsi
Mizanur Rahman

Jawaban:


177

toFixedbukan metode jenis variabel non-numerik. Dengan kata lain, Lowdan Hightidak bisa diperbaiki karena ketika Anda mendapatkan nilai dari sesuatu di Javascript, secara otomatis diatur ke tipe string. Menggunakan parseFloat()(atau parseInt()dengan radix, jika itu bilangan bulat) akan memungkinkan Anda untuk mengonversi jenis variabel yang berbeda menjadi angka yang akan memungkinkan toFixed()fungsi untuk bekerja.

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

Anda lupa tanda kurung dan tanda kutip setelah tanda $, bukan?
Ari Waisberg

1
@AriWais $SliderValFromadalah nama variabel yang digunakan oleh OP, bukan fungsi
jeremy

@jeremy Anda benar, saya tidak memperhatikan posting asli ... Saya hanya mengatakan kepada mereka yang datang melihat langsung ke solusi parseFloat ($ ('slide']. val ())
Ari Waisberg

91

Itu karena Lowadalah sebuah string.

.toFixed() hanya bekerja dengan angka.


Coba lakukan:

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

Memperbaiki kesalahan saya, Terima kasih. Masalah ini dihadapi di browser firefox.
ShivarajRH

26

Low adalah sebuah string.

.toFixed() hanya bekerja dengan angka.

Cara sederhana untuk mengatasi masalah tersebut adalah dengan menggunakan paksaan tipe :

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

Perkalian dengan 1 memaksa kode untuk mengubah string menjadi angka dan tidak mengubah nilainya. Kode JSFiddle di sini .


1
Simpan satu karakter dengan (+ Low] .toFixed (..): P
Frank

2

Anda perlu mengonversi ke jenis nomor:

(+Low).toFixed(2)

0

Dalam suatu fungsi, gunakan sebagai

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


},
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.