我尝试将输入的密钥代码与输入的更改事件进行比较,但是当我尝试它时,我只看到代理对象而不是事件处理程序对象。我无法找到任何解决方案。在另一个组件中,我实现了它,但在这个组件中,我不能。
我的处理程序功能是:
handleChange(event){
this.setState({
searchValue : this.searchInput.value
});
if(this.searchInput.value.length>2&&!this.state.recommendation&&this.focused){
this.setState({
recommendation:true
});
} else if(this.searchInput.value.length<3&&this.state.recommendation&&this.focused) {
this.setState({
recommendation:false
});
return;
}
console.log(event) //event is returned as Proxy object
if(event.keyCode === 13){
this.context.router.history.push(`/yardim/arama/${this.searchInput.value}`);
return;
}
if(this.searchInput.value.length>2){
this.bouncer.handle();
}
}
和渲染功能是:
render(){
return(
<div id="faq-search-box">
{this.state.recommendation}
<i className="icon hb-icon-search_icon"></i>
<input id="faq-search-input" type="text" placeholder="Yardım konusu ara..." value={this.state.searchValue} ref={input=>{this.searchInput=input;}} onChange={this.handleChange.bind(this)} onFocus={this.onFocus} onBlur={this.onBlur} />
<div className="clearfix"></div>
{ this.state.recommendation &&
<div id="faq-recommendation-box">
{this.props.FAQRecomendations&&
<ul>
{this.props.FAQRecomendations.map((faq)=>
<li key={faq.id}><a onMouseDown={(e)=>{this.onMouseDown(`/yardim/${faq.slug}#${faq.id}`,e)}} title={faq.name}>{faq.name}</a></li>
)}
</ul>
}
</div>
}
</div>
)
}
有什么问题?我如何访问事件处理程序?
答案 0 :(得分:2)
我找到的解决方案是。问题是由于SyntheticEvent而发生的。
Proxy对象上有一个名为nativeEvent的对象。
谢谢你,我实现了keyCode。
例如:
...
if(event.nativeEvent.keyCode === 13){
this.context.router.history.push(`/yardim/arama/${this.searchInput.value}`);
return;
}
...
答案 1 :(得分:1)
请尝试收听KeyDown事件。这是演示。
class Demo extends React.Component {
constructor() {
super()
this.state = {
message:''
}
}
onKeyDown(e) {
if (e.keyCode === 13) {
console.log('Enter Key Pressed');
}
}
handleChange(e) {
this.setState({
message: e.target.value
});
}
render() {
return <div>
<input
value={this.state.message}
onChange={this.handleChange.bind(this)}
onKeyDown={this.onKeyDown}
/>
</div>;
}
}
ReactDOM.render(
<Demo />,
document.getElementById('container')
);
<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="container"/>