当将“ onInput”用作侦听事件时(在IE9 / 10中),简单的受控输入不会基于用户输入来更新值。 “ onChange”可以正常工作,但是已选择“ onInput”作为我们的事件,以便解决IE11中的粘贴值。
class TestComp extends React.Component {
constructor(props){
super(props);
this.state = { value: "" };
this.updateValue = this.updateValue.bind(this);
}
render(){
return <input onInput={this.updateValue} value={this.state.value} />;
}
updateValue(evt){
this.setState({ value: evt.target.value });
}
};
https://codepen.io/anon/pen/KmJPGR
这是控制输入的不正确实现吗?如果是,如何解决?如果没有,存在哪些替代方案?
最佳答案
我仍然会使用onChange
,尽管我现在无法对其进行测试,但我听说onInput
与IE9有关。
根据React docs:
对于<input>
和<textarea>
,onChange
代替—通常应代替DOM的内置oninput
事件处理程序使用。
如何在IE11中为onChange
创建修复程序而不使用其他侦听器?
尽管我不建议这样做,但黑客可能同时使用onChange
和onInput
。请记住,Chrome会触发这两个调用,因此我建议仅在onInput
匹配时才传递userAgent
。
我还发现此polyfill可以解决其中的一些问题(删除,清除,削减值),但是无法测试,https://github.com/buzinas/ie9-oninput-polyfill。