toLocaleString сбрасывает значение после 5 цифр

#javascript #jquery

#javascript #jquery

Вопрос:

Резюме: я создаю форму, которая имеет много входных данных, некоторые из которых должны принимать только целочисленное значение. Эти входные данные имеют класс int-val , на который я ссылаюсь в своем Js.

Я настраиваю входные данные int так, чтобы после каждого третьего целого числа включались запятые keyup . Мне это удалось, но теперь this.value сбрасывается после четвертого символа keyup , и я не уверен, почему.

Усилие: вот как выглядит мой код:

 function addComma(x) {
   return x.toLocaleString('en');
}

// add function to int inputs
$('.int-val').keyup(function (e) {
   let val = parseFloat(this.value);
   this.value = addComma(val);
   console.log(this.value);
}
  

В консоли вывод для ‘4500000’ выглядит следующим образом:

 4
45
450
4,500
4 // if adding a fifth character, this.value resets to the first character entered
  

Это оказывается сложнее, чем я ожидал. Есть ли более простой способ добиться этого?

Ответ №1:

Это происходит потому, что вы анализируете локализованное число 4,500 и , оно не поддерживается, поэтому parseFloat выбрасывает все после неподдерживаемого символа (the , ).

Встроенного метода для анализа локализованных чисел не существует.

Для этой конкретной локализации, которую вы используете, вы могли бы сделать parseFloat(this.value.replace(/,/g,'')); , и вы бы решили проблему.

 function addComma(x) {
  return x.toLocaleString('en');
}

// add function to int inputs
$('.int-val').keyup(function(e) {
  let val = parseFloat(this.value.replace(/,/g, ''));
  this.value = addComma(val);
  console.log(this.value);
})  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

<input type="text" class="int-val" />  

Вам все равно придется обрабатывать десятичные дроби и пустые строки.


Взгляните на https://github.com/globalizejs/globalize для более надежного подхода