我正试图从输入中排除减号和加号,但却出了问题:
我试着模仿您的代码,发现 React**上的 <input type='number' />存在问题。关于解决方法,请查看此示例并亲自尝试: https://codepen.io/zvona/pen/WjpKJX?editors=0010
<input type='number' />
您需要将其定义为只包含数字模式的普通输入(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;
这种方法最大的注意事项是在手机上使用时--> 键盘不是数字格式,而是正常的字母格式。
一行代码
<input value={this.state.financialGoal} onChange={event => this.setState({financialGoal: event.target.value.replace(/\D/,'')})}/>
要停止键入,请使用 onKeyPress 而不是 onChange 。
onKeyPress
onChange
在 onKeyPress 中使用 event.preventDefault() 意味着停止按压事件。
event.preventDefault()
由于 keyPress 处理程序在 onChange 之前触发,因此必须检查按下的键 (event.keyCode),而不是输入的当前值 (event.target.value)。
keyPress
event.keyCode
event.target.value
onKeyPress(event) { const keyCode = event.keyCode || event.which; const keyValue = String.fromCharCode(keyCode); if (/\+|-/.test(keyValue)) event.preventDefault(); }
我试着模仿您的代码,发现 React**上的
<input type='number' />
存在问题。关于解决方法,请查看此示例并亲自尝试: https://codepen.io/zvona/pen/WjpKJX?editors=0010您需要将其定义为只包含数字模式的普通输入(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
。在
onKeyPress
中使用event.preventDefault()
意味着停止按压事件。由于
keyPress
处理程序在onChange
之前触发,因此必须检查按下的键 (event.keyCode
),而不是输入的当前值 (event.target.value
)。下面的演示 👇🏻;