Дополнительно
Только числа. Ввод числа в React
Я'пытаюсь исключить минус и плюс из ввода, но это'идет не так:
handleChange(event) {
const value = event.target.value.replace(/\+|-/ig, '');
this.setState({financialGoal: value});
}
Рендеринг входного кода:
<input style={{width: '150px'}} type="number" value={this.state.financialGoal} onChange={this.handleChange}/>
27
3
Я попытался сымитировать ваш код и заметил, что there's problem on React with
<input type='number' />
. В качестве обходного пути посмотрите этот пример и попробуйте сами: https://codepen.io/zvona/pen/WjpKJX?editors=0010.Вам нужно определить его как обычный input (type='text') с шаблоном только для чисел:
<input type="text" pattern="[0-9]*" onInput={this.handleChange.bind(this)} value={this.state.financialGoal} />
А затем сравнить валидность вводимых данных:
const financialGoal = (evt.target.validity.valid) ? evt.target.value : this.state.financialGoal;
.Самая большая оговорка в этом подходе - когда речь идет о мобильных устройствах --> где клавиатура не цифровая, а обычная буквенная.
одна строка кода
Чтобы остановить ввод, используйте
onKeyPress
, а неonChange
.Использование
event.preventDefault()
внутриonKeyPress
означает ОСТАНОВКУ события нажатия.Поскольку обработчик
keyPress
срабатывает доonChange
, вы должны проверить нажатую клавишу (event.keyCode
), а не текущее значение ввода (event.target.value
).Демонстрация ниже 👇🏻