Похоже, что операционному оператору необходимо отформатировать ввод валюты, когда пользователь вводит текст, и хранить копию необработанных данных.
Таким образом, нам нужно как-то скрыть ввод, который фактически вводит пользователь, и показать отформатированный вводвместо этого.
Правильное событие для перенаправления ввода: .... на input
.
Показывать каретку на отформатированном вводе сложно, но я постараюсь отредактировать ответдля решения этой проблемы.
Ниже (своего рода) рабочего примера:
var original = document.getElementById("input1");
var clone = original.cloneNode(true);
clone.id += '-clone';
original.parentElement.parentElement.append(clone);
var formattedClone = original.cloneNode(true);
formattedClone.id += '-formatted-clone';
original.parentElement.insertBefore(formattedClone, original);
original.addEventListener('input', function(event) {
const currency = 'GBP';
const locale = 'en-GB';
// const formattedValue = event.target.value;
const formatter = new Intl.NumberFormat(locale, { style: 'currency', currency: currency });
// const raw = formatToRaw(formattedValue, formatter);
original.value = event.target.value;
formattedClone.value = formatter.format(event.target.value);
clone.value = event.target.value;
});
#input1 {
position: absolute;
left: 0px;
top: 0px;
opacity: 0;
}
#wrapper {
position: relative;
}
<div id="wrapper"><input id="input1" /></div>