我正在使用React.js构建定制的,可访问的select
输入。我需要使up
和down
箭头键起作用,因为tab
键将在select
输入的option
s范围内。
我在元素上有一个handleKeyPress
函数,用于检测何时按下了其他键(例如'Enter'
可以正常工作)。
下面是一个示例option
:
<li
className="oc-select-field__item"
tabIndex="0"
onClick={handleClick}
onKeyPress={handleKeyPress}
>
...这是handleKeyPress
函数
handleKeyPress = event => {
if (event.key === 40) {
console.log('Down arrow key fired'); // does not fire
}
if (event.key === 'Enter') {
console.log('Enter key fired'); // does fire
}
};
按下down
箭头时未能成功检测到我在做什么错了?
答案 0 :(得分:1)
event.which
将为您提供密钥的数字值。
event.key
和event.code
将为您提供一个字符串值。
尝试使用此工具:http://keycode.info
if (event.key === 'ArrowDown') {
console.log('Down arrow key fired');
}
如@devserkan所述,您应该使用onKeyDown
而不是onKeyPress
。
按下键时会触发 keydown 事件。与keypress事件不同,对于产生字符值的键和不产生字符值的键都会触发keydown事件。
答案 1 :(得分:1)
对于箭头键,我认为您需要onKeyDown
而不是onKeyPress
。
class App extends React.Component {
handleKeyPress = ( event ) => {
if ( event.key === "ArrowDown" ) {
console.log( "Down arrow key fired" ); // does not fire
}
if ( event.key === "Enter" ) {
console.log( "Enter key fired" ); // does fire
}
};
render() {
return (
<div>
<ul>
<li
tabIndex="0"
onClick={this.handleClick}
onKeyDown={this.handleKeyPress}
>Foo
</li>
</ul>
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>