当将“ 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创建修复程序而不使用其他侦听器?
尽管我不建议这样做,但黑客可能同时使用onChangeonInput。请记住,Chrome会触发这两个调用,因此我建议仅在onInput匹配时才传递userAgent

我还发现此polyfill可以解决其中的一些问题(删除,清除,削减值),但是无法测试,https://github.com/buzinas/ie9-oninput-polyfill

07-21 21:51