javascript - 使用 React 监听整个 dom 上的点击事件的正确方法是什么?

标签 javascript reactjs

我已经使用 react 创建了一个日历。它只是一堆li。我希望能够单击该页面并出现一个弹出窗口来输入新的约会。我知道我可以使用 react-bootstrap 并将每个 li 包装在 OverlayTrigger 中,并使用它来创建我的 popover >,但这会向我的 dom 添加大量代码。

当我们使用jQuery时,我们只需将事件监听器附加到body,然后我们就可以添加我们点击的任何 li 上的弹出窗口

有没有办法在没有 jQuery 的情况下做到这一点?

最佳答案

考虑到您在某些父 ul 元素中只有一堆 li,请在父元素上绑定(bind)一个事件监听器,但在事件处理程序中,检查实际目标是否触发事件的是一个 li 并采取相应的行动。

<ul id="parent">
  <p>Some para</p>
  <li class="cell 1">Element 1</li>
  <li class="cell 2">Element 2</li>
  <li class="cell 3">Element 3</li>
</ul>
  <script>
    document.getElementById("parent").addEventListener("click", function(e) {
      if(e.target && e.target.nodeName == "LI") {   
          console.log("List item "+ e.target.className);
      }else{
          console.log('not a list item');
      }
    });
  </script>

这是一个bin尝试一下这个方法:)

关于javascript - 使用 React 监听整个 dom 上的点击事件的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28744151/

相关文章:

javascript - Sencha 中的 Ext.Date.format()

javascript - jQuery Accordion 替代品(没有 jQuery UI)

javascript - JQUERY:动态 AJAX 和 html 元素删除

javascript - 在 react.js 中使用没有这个的 setState

reactjs - 使用 enzyme 检查具有浅渲染的子组件的 Prop

reactjs - fetchMore 导致页面意外重新渲染

javascript - XMLHttpRequest JSON Post 采用表单 urlencoded

javascript - 如何使用扩展运算符向对象添加属性而不是覆盖它?

javascript - html 输入类型文件接受图像不允许在 ios 11 中选择文件

javascript - 无论选择了哪个选项卡,每次都会调用所有 React-bootstrap Tabs 渲染函数