reactjs - 如何在 React 中的 onblur 事件之后检查组件是否已被单击

标签 reactjs onblur

嘿伙计们,我有一个带有下拉菜单的搜索栏的问题。截至目前,每当搜索栏上发生 onBlur 事件时,我想关闭下拉菜单。 (这只是一个输入标签)但我也希望它能够检测到它何时点击了我的下拉菜单。如果是这样,触发一些其他功能。

这是我的搜索栏,它将在 onClickLocationSearch Prop 之前调用 onBlur Prop ,这不是我想要的,因为 onClickLocationSearch 和 onBlur 事件处理不同的功能。换句话说,我希望 onBlur 事件检查它是否点击了另一个组件。

这是带有 onBlur 事件的搜索栏:

<SearchBar
onFocus={this.handleOpenLocationSearch}
placeholder={this.state.placeholder}
onBlur={this.handleCloseLocationSearch}
/>

这是结果/下拉菜单。
<Results
onClickLocationSearch={this.handleClickLocationSearch}
/>

onBlur 将被调用,因为无论您是否单击 Results 组件,它都会被调用。

以下是他们调用的函数:
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 synthetic event 中的第二个参数找出获得焦点的元素。上面写得很好here .

    关于reactjs - 如何在 React 中的 onblur 事件之后检查组件是否已被单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57529698/

    相关文章:

    javascript - 超过最大更新深度。当组件在 componentWillUpdate 或 componentDidUpdate 中重复调用 setState 时,可能会发生这种情况

    javascript - 在导致模糊的点击事件之后,我应该如何触发 Javascript 模糊事件?

    javascript - 在聚焦和模糊时更改 TinyMCE 的边框颜色

    javascript - Google Places Autocomplete 事件标签按下

    javascript - 如何让 JavaScript 找到焦点输入的值,如果是默认值则清除,如果是新数据则保留?

    javascript - NextJs TypeError : nextCallback is not a function

    javascript - 如何将媒体查询添加到 react 选择中的样式属性?

    javascript - React Router Link with params 不会使用来自 componentDidMount 和 Redux axios 数据获取的新数据重新加载页面

    javascript - 在搜索表单下方显示最后搜索的项目

    javascript - 如何添加 onBlur 事件保持原来的?