传递给onkeyup和onkeydown处理程序的事件不会在Chrome上使用ReactJS设置event.key值

时间:2016-04-12 16:11:17

标签: javascript google-chrome reactjs

当我在Chrome中运行以下代码时,我无法访问event.key值:

var Hello = React.createClass({
  getInitialState: function() {
     return { value: 'Empty' }
  },

  keyHandler: function(e){
    e.persist();
    var value = e.type + ':' + e.key;

    this.setState(function(previousState, currentProps) {
       return { value: previousState.value + '\n' + value };
    });
  },

  render: function() {
    return (
    <div>
      <input 
        onKeyDown={this.keyHandler}
        onKeyUp={this.keyHandler}
        onKeyPress={this.keyHandler}
      />
      <pre>{this.state.value}</pre>
     </div>
    );
  }
});

ReactDOM.render(
  <Hello />,
  document.getElementById('container')
);

在最新的IE和Firefox上它工作正常,但在chrome上我得到了以下结果: Result in chrome

据我了解React文档:https://facebook.github.io/react/docs/events.html React的事件应该提供跨浏览器的行为,所以我希望在所有浏览器中都有相同的结果。我错过了什么吗?

PS。我已经创建了一个jsfiddle来解决这个问题:https://jsfiddle.net/69z2wepo/38132/

1 个答案:

答案 0 :(得分:0)

source code中,您可以看到当不在本机事件对象上时,React仅将 keyCode 转换为缺少的用于特殊键:

/**
 * Translation from legacy `keyCode` to HTML5 `key`
 * Only special keys supported, all others depend on keyboard layout or browser
 * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
 */