Проверить наличие введённой запятой или точки в

Как определить тот факт, что в <input type="number"> уже введён символ запятой или точки. Для чего это нужно: в FireFox неприятная особенность, в подобный input абсолютно свободно можно ввести любой символ, при этом он обрабатывается как число, то есть console.log(e.target.value) выводит в консоли "1500", в то время, как в инпуте введено "1500," или "1500."

Из-за того, что Firefox не блокирует ненужные символы, я пишу свой обработчик.

//Предотвратить e в числовых инпутах
$("input[type='number']").on("keydown", function(e){
    let isFirefox = typeof InstallTrigger !== 'undefined';

    if (isFirefox) {

        if (
            !(["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"].includes(e.key) ||
                [".", ","].includes(e.key) && !e.target.value.match(/,./) || //не работает
                e.keyCode < 32 ||
                e.keyCode > 32 && e.keyCode < 48 ||
                e.keyCode > 90 && e.keyCode < 94 ||
                e.keyCode > 111 && e.keyCode < 124 ||
                [144, 145, 182, 183].includes(e.keyCode))
        ) {
            e.preventDefault();
        }
    }

});

Остаётся предотвратить ввод более чем одной точки или запятой. Подскажите, существует ли какая-то функция вроде e.target.непосредственноСтроковоеЗначение, где e.target - элемент <input type="number">


Ответы (1 шт):

Автор решения: Johnny Rocket

Можно попробовать что то вроде:

let lastValue = inp.value;
inp.addEventListener('input', (evt) => {  
  if (inp.value.match(/^\d+[.,]?\d*$/)) {
    lastValue = inp.value;
  } else {
    inp.value = lastValue;
  }
})
→ Ссылка