Pourquoi Firebug dit-il que toFixed () n'est pas une fonction?


94

J'utilise jQuery 1.7.2 et jQuery UI 1.9.1. J'utilise le code ci-dessous dans un curseur. (http://jqueryui.com/slider/)

J'ai une fonction qui devrait tester deux valeurs et en fonction de la différence entre les deux valeurs les reformater (à la décimale appropriée). Si la différence est supérieure à 10, je vais analyser l'entier. Si la différence est supérieure à 5, elle doit conserver une décimale. Tout le reste, je garderai deux décimales.

Lorsque j'entre deux valeurs qui ont une différence de dix ou moins, j'utilise la fonction toFixed (). Et, dans Firebug, je vois une erreur:

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

Y a-t-il quelque chose de simple que je fais mal?

Voici mon code:

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

J'ai le même problème. mais en local son travail. en direct, il affiche une erreur - TypeError: value.sell_price.toFixed n'est pas une fonction
Mizanur Rahman

Réponses:


177

toFixedn'est pas une méthode de types de variables non numériques. En d'autres termes, Lowet Highne peut pas être corrigé car lorsque vous obtenez la valeur de quelque chose en Javascript, il est automatiquement défini sur un type de chaîne. Utiliser parseFloat()(ou parseInt()avec une base, s'il s'agit d'un entier) vous permettra de convertir différents types de variables en nombres, ce qui permettra à la toFixed()fonction de fonctionner.

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

vous avez oublié la parenthèse et les guillemets après le signe $, n'est-ce pas?
Ari Waisberg

1
@AriWais $SliderValFromest le nom de variable utilisé par l'OP, pas une fonction
jeremy

@jeremy vous avez raison, je n'ai pas fait attention au post original ... Je viens de dire à ceux qui viennent chercher directement la solution son parseFloat ($ ('slide'). val ())
Ari Waisberg

91

C'est parce que Lowc'est une chaîne.

.toFixed() ne fonctionne qu'avec un nombre.


Essayez de faire:

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

Correction de mon erreur, merci. Ce problème rencontré dans le navigateur Firefox.
ShivarajRH

26

Low est une chaîne.

.toFixed() ne fonctionne qu'avec un nombre.

Un moyen simple de surmonter ce problème consiste à utiliser la coercition de type :

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

La multiplication par 1 oblige à coder pour convertir la chaîne en nombre et ne change pas la valeur. Code JSFiddle ici .


1
Enregistrez un caractère avec (+ Bas) .toFixed (..): P
Frank

2

Vous devez convertir en type de nombre:

(+Low).toFixed(2)

0

Dans une fonction, utilisez comme

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


},
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.