javascript - React 应用程序中除特定 DOM 节点之外的任何内容上的单击事件

标签 javascript events reactjs

在 React 应用程序中捕获和处理“除特定 DOM 节点之外的任何内容”上的点击事件的最佳方法是什么?

最佳答案

点击事件的处理程序是最简单的部分:这可以是任何方法。 事件的注册以及调用处理程序的触发器是最困难的部分。

没有干净的方法来捕获“在外部点击......”事件。 然而,您可以应用各种(HTML/CSS/Javascript)技巧:

  • 如果它是模态页面/弹出窗口,您还可以渲染整个页面背景矩形(例如稍微透明的灰色),它位于整个页面的前面,但弹出窗口的后面。向该背景添加一个点击事件监听器以删除模态+灰色背景。
  • 另一种方法是在您的 top-react 组件上使用 focusout javascript 事件:
    • 由 React 渲染的顶部 HTML 组件应该能够获得焦点(需要是 <a> 或类似的 HTML,或者 - 不太干净 - 需要 tabindex=... 才能工作)
    • 渲染后立即赋予元素焦点(在 componentDidMount()` 内)
    • 添加焦点事件监听器,该监听器会触发处理程序对外部的点击执行某些操作。

一旦组件不再具有焦点,就会触发 focusout 事件: - 如果组件的子组件获得焦点(例如,您单击组件内的某些内容),也会触发焦点输出:对于菜单通常没有问题,但对于带有表单的弹出窗口来说是不需要的 - 如果用户按 TAB 键,焦点也会被触发。

关于javascript - React 应用程序中除特定 DOM 节点之外的任何内容上的单击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35652962/

相关文章:

javascript - 响应式移动菜单和 Javascript——征求意见、批评

javascript - 确定数组类型的最佳方法

events - 在ListView中垂直方向拖动GestureDetector时,无法触发GestureDetector onPanUpdate事件

javascript - jQuery 添加事件并立即执行

javascript - ReactJS 逻辑 : Return 8 to 8 links and fill empty places with images

javascript - 带有 src 和内容的脚本标签是什么意思?

javascript - HTML 元素 btn 为 null,怎么了?

c# - 从另一个事件中引发一个事件是不是很臭?

reactjs - 如何在 React Native 中创建可拖动组件?

javascript - ReactJS - 你可能需要一个适当的加载器错误