Неверное расположение каретки в input с валидацией?
Есть input с денежной маской - пробел после каждого третьего символа с конца
- Почему не удаляется символ клавишей Del, если каретка перед пробелом?
- Почему сбивается сохранение каретки? Должна оставаться на том же месте после изменений, но сбивается. Судя по всему из-за пробелов, но они вроде должны сохраняться, так как selectionStart стоит вначале функции.
document.querySelectorAll('input').forEach( input => {
if (input.dataset && input.dataset.validate === 'money') {
input.addEventListener('input', ({target}) => {
// Сохраняем расположение каретки
let saveCarriage = target.selectionStart;
// 1. Удаляем все буквы, 2. Удаляем все пробелы, 3. Ставим пробел между 3 символами
target.value = target.value.toString().replace(/[A-Za-zА-Яа-яЁё]/, '').replace(/\s/g, '').replace(/(\d)(?=(\d{3})+(\D|$))/g, '$1 ');
// Устанавливаем расположение каретки
target.setSelectionRange(saveCarriage,saveCarriage);
})
}
});
<input type="text" data-validate="money" placeholder="Деньги" value="">