Каков наилучший способ форматирования числа с точностью до 2 знаков после запятой в jQuery?
-
20-08-2019 - |
Вопрос
Это то, что у меня есть прямо сейчас:
$("#number").val(parseFloat($("#number").val()).toFixed(2));
По-моему, это выглядит грязно.Я не думаю, что я правильно связываю функции.Должен ли я вызывать его для каждого текстового поля, или я могу создать отдельную функцию?
Решение
Если вы делаете это с несколькими полями или делаете это довольно часто, то, возможно, ответом будет плагин.
Вот начало работы плагина jQuery, который форматирует значение поля с точностью до двух знаков после запятой.
Он запускается событием onchange поля.Возможно, вам захочется чего-то другого.
<script type="text/javascript">
// mini jQuery plugin that formats to two decimal places
(function($) {
$.fn.currencyFormat = function() {
this.each( function( i ) {
$(this).change( function( e ){
if( isNaN( parseFloat( this.value ) ) ) return;
this.value = parseFloat(this.value).toFixed(2);
});
});
return this; //for chaining
}
})( jQuery );
// apply the currencyFormat behaviour to elements with 'currency' as their class
$( function() {
$('.currency').currencyFormat();
});
</script>
<input type="text" name="one" class="currency"><br>
<input type="text" name="two" class="currency">
Другие советы
Может быть, что-то вроде этого, где вы могли бы выбрать более одного элемента, если бы захотели?
$("#number").each(function(){
$(this).val(parseFloat($(this).val()).toFixed(2));
});
Мы модифицируем функцию Meouw для использования с keyup, потому что, когда вы используете входные данные, это может быть более полезным.
Проверьте это:
Привет всем!, мы с @heridev создали небольшую функцию в jQuery.
Вы можете попробовать следующий:
HTML
<input type="text" name="one" class="two-digits"><br>
<input type="text" name="two" class="two-digits">
jQuery
// apply the two-digits behaviour to elements with 'two-digits' as their class
$( function() {
$('.two-digits').keyup(function(){
if($(this).val().indexOf('.')!=-1){
if($(this).val().split(".")[1].length > 2){
if( isNaN( parseFloat( this.value ) ) ) return;
this.value = parseFloat(this.value).toFixed(2);
}
}
return this; //for chaining
});
});
ДЕМО-ВЕРСИЯ ОНЛАЙН:
(@heridev, @vicmaster)