Входное значение, отформатированное десятичными дробями

#javascript #forms #input

#javascript #формы #ввод

Вопрос:

Привет, хорошие люди на SO.

Итак, у меня есть поле ввода в кредитном калькуляторе. Здесь я хочу, чтобы вводимое пользователем значение было отформатировано десятичными дробями (чтобы, например, было легче различать 100000 и 1000000).)

Я хочу использовать JavaScript для выполнения этого «преобразования», если можно так это назвать, и я нашел кое-что в документах MDN о конструкторе объекта под названием «Intl.NumberFormat»

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat

И я вставил следующее в свой собственный JS-файл, как показано ниже:

 // Changes Loan Amount input to decimal format

document.getElementById("amount").addEventListener("input", function(){
 new Intl.NumberFormat('en-CA', {style: "decimal"}).format(amount);
});
  

Мой HTML выглядит следующим образом:

 <span class="input-group-text">$</span>
                  <input
                    type="text"
                    class="form-control"
                    id="amount"
                    placeholder="Loan Amount"
                  />  

Итак, результаты, которые я ищу, — это чтобы входные данные выглядели так, когда пользователь вводит это:

Желаемые результаты

Вместо этого:

введите описание изображения здесь

Надеюсь, это было понятно. Заранее спасибо за любую помощь.

Комментарии:

1. используете ли вы какой-либо фреймворк, такой как Angular или React? У них были бы другие способы сделать это, чем если бы вы просто использовали ванильный JavaScript. Также вы можете ознакомиться с этим постом о хитростях CSS

2. @Scrimothy, на данный момент я не использую никаких фреймворков. Итак, я хотел бы иметь возможность делать это на ванильном javascript, поскольку я пытаюсь изучить основы, прежде чем перейти к фреймворкам. Я проверю ссылку, спасибо!

Ответ №1:

Вы не обновляете поле ввода форматированным текстом:

 document.getElementById("amount").addEventListener("input", function(){
    document.getElementById("amount").value = new Intl.NumberFormat('en-CA', {style: "decimal"}).format(document.getElementById("amount").value);
});
  

Но, я думаю, вы захотите удалять нечисловые символы из каждой итерации ввода, так что это может быть ближе к тому, что вы хотите:

 document.getElementById("amount").addEventListener("input", function(){
    document.getElementById("amount").value = new Intl.NumberFormat('en-CA', {style: "decimal"}).format(document.getElementById("amount").value.match(/d /g).join(''));
});
  

Комментарии:

1. Я пытался реализовать то, что вы написали, но теперь мое поле ввода сбрасывается, когда в поле ввода попадает 3 или более чисел. Я получаю сообщение об ошибке в консоли, смотрите картинку по ссылке ниже. gyazo.com/36cbdfead4c3ead76462dc64d0d01afb Мой код теперь выглядит так, смотрите ссылку ниже: gyazo.com /…

2. Вы использовали второй блок? Это должно удалить нечисловое значение с помощью регулярного выражения.

3. Привет, да, я тоже пробовал это. Это тоже не помогло. Я получаю ту же ошибку, что и в предыдущем комментарии.

4. .match возвращает массив, поэтому вам нужно объединить его обратно в строку. Я отредактировал второй блок кода выше.

5. Еще раз спасибо за ваш комментарий. Однако я получаю ту же ошибку с кодом, который вы опубликовали совсем недавно, во втором блоке. Пожалуйста, посмотрите мой скриншот по ссылке ниже. Теперь, основываясь на моем незнании регулярных выражений, возможно, это свойство «.value.match» неверно? Еще раз спасибо за вашу помощь. SS предупреждающего сообщения: gyazo.com/256a09652ed5e8b42be37ca4bc447f3e