reactjs - 如何在 React 中的 onblur 事件后检查组件是否已被单击
问题描述
嘿伙计们,我有一个问题,我有一个带有下拉菜单的搜索栏。截至目前,我想在搜索栏上发生 onBlur 事件时关闭下拉菜单。(这只是一个输入标签)但我也希望它能够检测到它何时点击了我的下拉菜单。如果是这样,触发其他一些功能。
这是我的搜索栏,它将在 onClickLocationSearch 道具之前调用 onBlur 道具,这不是我想要的,因为 onClickLocationSearch 和 onBlur 事件处理不同的功能。换句话说,我希望 onBlur 事件检查它是否单击了另一个组件。
这是带有 onBlur 事件的搜索栏:
<SearchBar
onFocus={this.handleOpenLocationSearch}
placeholder={this.state.placeholder}
onBlur={this.handleCloseLocationSearch}
/>
这是结果/下拉菜单。
<Results
onClickLocationSearch={this.handleClickLocationSearch}
/>
onBlur 将被调用,因为无论您是否单击结果组件,它都会被调用。
以下是他们调用的函数:
public handleClickLocationSearch() {
this.setState({queryParam: '/blah'});
this.setState({ query: '' });
this.setState({ editing: false });
}
public handleCloseLocationSearch() {
this.setState({ editing: false });
this.setState({ query: '' });
}
- 如果用户单击结果组件并失去对输入标签的关注,我想调用 handleClickLocationSearch,
- 如果用户失去对输入标记的关注并且没有单击结果组件,请调用 handleCloseLocationSearch。
解决方案
最好的解决方案是使用onBlur 合成事件中的第二个参数来找出哪些元素获得了焦点。这里有一篇很好的文章。
推荐阅读
- rabbitmq - 由于连接中断而导致 BasicPublish 失败后重新发送消息的正确方法
- wpf - 在 ListView 中仅加载少数项目,但在 CollectionView 过滤器中使所有项目都可用于搜索
- rust - Rust 中的安全并行高斯消元
- .net - WCF Soap WSDL 未加载所有类型
- javascript - 是否可以在 Google Data Studio 中创建动态配置?
- noise-generator - 有没有均匀平滑的随机函数?
- html - 没有 html id 的表中按钮的 Xpath
- c - 您如何使用 Nvidia Flex 设置模拟?
- prolog - Prolog - 一个卡住的简单程序(似乎进入无限循环)
- amazon-web-services - 如何停止/退出 AWS Glue 作业 (PySpark)?