我在这里读了几篇关于这个问题的帖子,但似乎仍然不能修复这个错误。对于上下文,我在一个具有自定义text_area框的自定义PopupWindow类中工作。这不应该是相对的,除非react输入框的典型属性在这种情况下不可用(即onKeyPress)。它已经被onEnterKeyPress取代了,但本质上是一样的。
事件处理程序:
getKeyPress = evt => {
let pressed = evt.keyCode || evt.which;
if(document.activeElement.tagName.toLocaleLowerCase() === 'textarea'){
console.log("TRUE"); //Is returning TRUE
if(pressed === 13){
"<br />"
}
}
}
调用事件处理程序:
<PopupWindow onEnterKeyPress= {this.getKeyPress} >content here... </PopupWindow>
发布于 2019-01-09 20:29:40
鉴于您提供的信息有限,我认为为了处理自定义事件,您应该在生命周期方法之一的组件中使用vanilla js注册它们。例如:
componentDidMount() {
window.addEventListener("customEvent", this.getKeyPress);
}
当然,之后还会注销它们。
发布于 2019-01-09 21:03:42
下面是一个显示keyCode的简单keyPress事件。从理论上讲,它在使用自定义事件时应该起到同样的作用。请注意,我使用的是charCode而不是keyCode
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
keyCode: null
};
this.handleKeyPress = this.handleKeyPress.bind(this);
}
handleKeyPress = (event) => {
this.setState({ keyCode: event.charCode })
}
render() {
return (
<div>
<textarea onKeyPress={this.handleKeyPress} />
{this.state.keyCode && <span>KeyCode = {this.state.keyCode}</span>}
</div>
);
}
}
ReactDOM.render( < App / > ,
document.getElementById('root')
);
textarea {
width: 100%;
height: 100px;
}
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script><div id="root" />
https://stackoverflow.com/questions/54116790
复制相似问题