当我在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上我得到了以下结果:
据我了解React文档:https://facebook.github.io/react/docs/events.html React的事件应该提供跨浏览器的行为,所以我希望在所有浏览器中都有相同的结果。我错过了什么吗?
PS。我已经创建了一个jsfiddle来解决这个问题:https://jsfiddle.net/69z2wepo/38132/
答案 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
*/