【发布时间】:2015-09-13 18:34:00
【问题描述】:
我正在寻找一种方法来检测点击事件是否发生在组件之外,如article 中所述。 jQuery最接近()用于查看来自单击事件的目标是否将dom元素作为其父元素之一。如果存在匹配项,则单击事件属于其中一个子项,因此不被视为在组件之外。
所以在我的组件中,我想将点击处理程序附加到窗口。当处理程序触发时,我需要将目标与组件的 dom 子项进行比较。
click 事件包含像“path”这样的属性,它似乎保存了事件经过的 dom 路径。我不确定要比较什么或如何最好地遍历它,而且我想一定有人已经把它放在一个聪明的实用函数中......不是吗?
【问题讨论】:
-
您能否将点击处理程序附加到父级而不是窗口?
-
如果您将点击处理程序附加到父级,您知道该元素或其子级之一何时被点击,但我需要检测所有被点击的 other 位置,所以处理程序需要附加到窗口。
-
我看了上一篇回复之后的文章。如何在顶部组件中设置一个 clickState 并传递孩子们的点击操作。然后你会检查孩子们的道具来管理打开关闭状态。
-
顶部组件将是我的应用程序。但是监听组件有好几个层次,在dom中没有严格的定位。我不可能将点击处理程序添加到我的应用程序中的所有组件,因为其中一个有兴趣知道您是否点击了它之外的某个地方。其他组件不应该知道这个逻辑,因为这会产生可怕的依赖关系和样板代码。
-
我想向你推荐一个非常好的库。由Airbnb创建:github.com/airbnb/react-outside-click-handler
标签: javascript dom reactjs