2012-12-27 10 views
48

Używam jQuery 1.7.2 i jQuery UI 1.9.1. Używam kodu poniżej w suwaku. (http://jqueryui.com/slider/)Dlaczego Firebug mówi toFixed() nie jest funkcją?

Mam funkcję, która powinna przetestować dwie wartości iw zależności od różnicy między tymi dwiema wartościami sformatować je (do odpowiedniego miejsca dziesiętnego). Jeśli różnica jest większa niż 10, przeanalizuję liczbę całkowitą. Jeśli różnica jest większa niż 5, powinna zawierać jedną cyfrę dziesiętną. Wszystko inne, zachowam dwa miejsca dziesiętne.

Po wprowadzeniu dwóch wartości, których różnica wynosi dziesięć lub mniej, używam funkcji toFixed(). I w Firebug widzę błąd:

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

Czy jest coś prostego, co robię źle?

Oto mój kod:

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

Odpowiedz

101

toFixed nie jest metodą non-numerycznych typów zmiennych. Innymi słowy, Low i High nie mogą zostać naprawione, ponieważ kiedy otrzymasz wartość czegoś w JavaScript, jest ona automatycznie ustawiana na typ łańcucha. Użycie parseFloat() (lub parseInt() z podstawnikiem, jeśli jest liczbą całkowitą), pozwoli ci konwertować różne typy zmiennych na liczby, które umożliwią działanie funkcji toFixed().

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

To dlatego Low jest ciągiem.

.toFixed() działa tylko z numerem.


Spróbuj to zrobić:

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

Twoja odpowiedź jest poprawna. Dałem punkty innej odpowiedzi, ponieważ wyjaśnił to bardziej grzecznie. Dzięki! –

+0

Naprawiono błąd, dzięki. Ten problem napotkał w przeglądarce Firefox. – ShivarajRH

+0

proste i poprawne. dzięki dla mnie również. – pess0a

17

Low = parseFloat(Low).toFixed(..); działa :) dowiedziałem się na własnej skórze, ..

+0

Najlepsze rozwiązanie, miał dokładnie ten sam problem w aplikacji, nad którą pracuję. Prosty, odpowiedni, ładny – Callat

11

Low jest ciągiem.

.toFixed() działa tylko z numerem.

Prostym sposobem na przezwyciężenie tego problemu jest:

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

Mnożenie przez 1 siłami do kodu, aby przekonwertować ciąg na numer i nie zmienia wartości. Kod JSFiddle here.

+2

Najprostsze rozwiązanie jest najlepsze. – Jules