2012-12-27 87 views
48

我正在使用jQuery 1.7.2和jQuery UI 1.9.1。我在滑塊內使用下面的代碼。 (http://jqueryui.com/slider/)爲什麼Firebug說toFixed()不是函數?

我有一個函數,應該測試兩個值,並根據兩個值之間的差異重新格式化它們(適當的小數點)。如果差值大於10,我將解析出整數。如果差值大於5,則應保留一位小數。其他一切,我會保留兩位小數。

當我輸入兩個具有10或更小差異的值時,我使用toFixed()函數。而且,在Firebug,我看到一個錯誤:

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

有什麼簡單的,我做錯了什麼?

這裏是我的代碼:

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

回答

101

toFixed不是非數字的變量類型的方法。換句話說,LowHigh不能被修復,因爲當你在Javascript中獲得某些東西的值時,它會自動設置爲字符串類型。使用parseFloat()(或parseInt()與一個基數,如果它是一個整數)將允許您將不同的變量類型轉換爲數字,這將啓用toFixed()函數的工作。

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

這是因爲Low是一個字符串。

.toFixed()只適用於一個數字。


嘗試這樣做:

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

你的回答是正確的。我給出了另一個答案的觀點,因爲他更詳細地解釋了它。謝謝! –

+0

解決了我的錯誤,謝謝。這個問題在Firefox瀏覽器面臨。 – ShivarajRH

+0

簡單而正確。謝謝你。 – pess0a

17

Low = parseFloat(Low).toFixed(..);作品:)學到了艱辛的道路..

+0

最好的解決方案,在我正在處理的應用程序中出現完全相同的問題。簡單,適用,不錯 – Callat

11

Low是一個字符串。

.toFixed()只適用於一個數字。

一個簡單的方法來解決這樣的問題是:

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

1種力量代碼乘法的字符串轉換數字並不會改變價值。 JSFiddle代碼here

+2

最簡單的解決方案是最好的。 – Jules

相關問題