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);
}
}
javascript
Evik James
la source
la source
Réponses:
toFixed
n'est pas une méthode de types de variables non numériques. En d'autres termes,Low
etHigh
ne 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. UtiliserparseFloat()
(ouparseInt()
avec une base, s'il s'agit d'un entier) vous permettra de convertir différents types de variables en nombres, ce qui permettra à latoFixed()
fonction de fonctionner.var Low = parseFloat($SliderValFrom.val()), High = parseFloat($SliderValTo.val());
la source
$SliderValFrom
est le nom de variable utilisé par l'OP, pas une fonctionC'est parce que
Low
c'est une chaîne..toFixed()
ne fonctionne qu'avec un nombre.Essayez de faire:
Low = parseFloat(Low).toFixed(..);
la source
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 .
la source
Vous devez convertir en type de nombre:
(+Low).toFixed(2)
la source
Dans une fonction, utilisez comme
render: function (args) { if (args.value != 0) return (parseFloat(args.value).toFixed(2)); },
la source