Функция Javascript toFixed()

Я пытаюсь отформатировать входные значения пользователя, используя следующую технику, но я получаю следующую ошибку в консоли Fire Bug

$(this).val(). toFixed не является функцией

$(".amount-text").bind('change',function () { 
     $(this).val(($(this).val()).toFixed(2));
}); 

Может кто-нибудь помочь мне в этом?

Ответы

Ответ 1

.val() возвращает строку, чтобы использовать .toFixed() на номер, который вам нужно будет сначала проанализировать на номер, например:

$(".amount-text").bind('change',function () { 
     $(this).val(parseFloat($(this).val()).toFixed(2));
});

Или с jQuery 1.4+, немного чище, по крайней мере для меня использовать функцию с .val():

$(".amount-text").bind('change',function () { 
     $(this).val(function(i, v) { return parseFloat(v).toFixed(2); });
});

Здесь вы можете попробовать здесь.

Ответ 2

toFixed работает только с числом, сначала проанализируйте значение на число:

 $(this).val(parseFloat($(this).val()).toFixed(2));

Ответ 3

Это потому, что val() возвращает String, а не Number. Чтобы иметь возможность использовать toFixed(), выполните следующие действия:

$(".amount-text").bind('change',function () { 
     $(this).val( (parseFloat($(this).val())).toFixed(2) );
});

или даже:

$(".amount-text").bind('change',function () { 
     $(this).val( (new Number($(this).val())).toFixed(2) );
});

Вы также можете сделать это немного более взломанно, поскольку:

$(".amount-text").bind('change',function () { 
     $(this).val( (0 + $(this).val()).toFixed(2) );
});

но я не рекомендую его для удобства чтения!