Проверить наличие введённой запятой или точки в <input type="number">

206
16 мая 2022, 00:50

Как определить тот факт, что в <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">

Answer 1

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

let lastValue = inp.value;
inp.addEventListener('input', (evt) => {  
  if (inp.value.match(/^\d+[.,]?\d*$/)) {
    lastValue = inp.value;
  } else {
    inp.value = lastValue;
  }
})
READ ALSO
Числовой алгоритм на JavaScript

Числовой алгоритм на JavaScript

Дано натуральное числоЕсли в нем есть цифры а и b, то определить, какая из них расположена в числе правее

271
Как реализовать генерацию сочетаний без повторений?

Как реализовать генерацию сочетаний без повторений?

Как лучше реализовать функцию combine с сигнатурой (JavaScript)

146
Как получить ширину React компонентов

Как получить ширину React компонентов

Подскажите - как я могу получить ширину g и text компонентов, чтобы потом на основе их значений вычислить нужный мне угол поворота для rotate

178
Как переписать цикл for в reducer?

Как переписать цикл for в reducer?

господаПрошу помочь со следующим вопросом

174