Чому Firebug каже, що Fixed () не є функцією?


93

Я використовую jQuery 1.7.2 та jQuery UI 1.9.1. Я використовую наведений нижче код у слайдері. (http://jqueryui.com/slider/)

У мене є функція, яка повинна перевірити два значення і залежно від різниці між двома значеннями переформатувати їх (до відповідного знака після коми). Якщо різниця більше 10, я розберу ціле число. Якщо різниця перевищує 5, вона повинна зберігати один десятковий знак. Все інше, я зберігатиму два знаки після коми.

Коли я ввожу два значення, різниця яких дорівнює десяти або менше, я використовую функцію 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);
}
}

У мене така сама проблема. але в місцевій своїй роботі. коли в режимі live відображається помилка - TypeError: value.sell_price.toFixed не є функцією
Mizanur Rahman

Відповіді:


175

toFixedне є методом нечислових типів змінних. Іншими словами, Lowі Highне може бути виправленим, оскільки коли ви отримуєте значення чогось у Javascript, воно автоматично встановлюється на тип рядка. Використання parseFloat()(або parseInt()з radix, якщо це ціле число) дозволить вам перетворити різні типи змінних у числа, що дозволить toFixed()функції працювати.

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

ви забули дужки та лапки після знака $, чи не так?
Арі Вайсберг,

1
@AriWais $SliderValFrom- це назва змінної, що використовується OP, а не функція
jeremy

@jeremy ти маєш рацію, я не звернув уваги на оригінальний пост ... Я просто сказав тим, хто приходить прямо до рішення, його parseFloat ($ ('slide'). val ())
Арі Вайсберг

91

Це тому Low, що це рядок.

.toFixed() працює лише з номером.


Спробуйте зробити:

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

Виправлено помилку, дякую. З цією проблемою стикається браузер Firefox.
ShivarajRH

26

Low це рядок.

.toFixed() працює лише з номером.

Простим способом подолання такої проблеми є використання примусу типу :

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

Помноження на 1 змушує кодувати перетворення рядка в число і не змінює значення. Код JSFiddle тут .


1
Збережіть одного символу за допомогою (+ Low) .to Fixed (..): P
Frank

2

Вам потрібно перетворити на тип числа:

(+Low).toFixed(2)

0

У функції використовуйте як

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


},
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.