2012-12-27 20 views
48

Sto usando jQuery 1.7.2 e jQuery UI 1.9.1. Sto usando il codice qui sotto all'interno di un cursore. (http://jqueryui.com/slider/)Perché Firebug dice aFixed() non è una funzione?

Ho una funzione che dovrebbe verificare due valori e in base alla differenza tra i due valori, riformattarli (alla posizione decimale appropriata). Se la differenza è maggiore di 10, analizzerò il numero intero. Se la differenza è maggiore di 5, dovrebbe mantenere un decimale. Tutto il resto, terrò due decimali.

Quando si immettono due valori con una differenza di dieci o meno, utilizzo la funzione toFixed(). E, in Firebug, vedo un errore:

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

C'è qualcosa di semplice che sto facendo male?

Ecco il mio codice:

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

risposta

101

toFixed non è un metodo di tipi di variabili non numerici. In altre parole, non è possibile correggere Low e High perché quando si ottiene il valore di qualcosa in Javascript, viene automaticamente impostato su un tipo di stringa. L'utilizzo di parseFloat() (o parseInt() con una radice, se è un numero intero) ti consentirà di convertire diversi tipi di variabili in numeri che abiliteranno la funzione toFixed() a funzionare.

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

Questo è dovuto al fatto Low è una stringa.

.toFixed() funziona solo con un numero.


provare a fare:

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

La tua risposta è corretta. Ho dato i punti all'altra risposta perché l'ha spiegato in modo più dettagliato. Grazie! –

+0

Risolto il mio errore, grazie. Questo problema si è verificato nel browser firefox. – ShivarajRH

+0

semplice e corretto. grazie anche a me – pess0a

17

Low = parseFloat(Low).toFixed(..); opere :) imparato nel modo più duro ..

+0

La migliore soluzione, aveva lo stesso identico problema in un'app a cui sto lavorando. Semplice, applicabile, piacevole – Callat

11

Low è una stringa.

.toFixed() funziona solo con un numero.

Un modo semplice per superare tale problema è:

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

La moltiplicazione per 1 forze al codice per convertire la stringa di numero e non modifica il valore. Codice JSFiddle here.

+2

La soluzione più semplice è la migliore. – Jules

Problemi correlati