javascript – 使用JQuery监听html正文上的所有点击除了特定的div及其子节点

前端之家收集整理的这篇文章主要介绍了javascript – 使用JQuery监听html正文上的所有点击除了特定的div及其子节点前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用jQuery监听器来监听用户对html主体的点击并执行特定功能,如果已经点击了身体上的任何位置,除了特定div和该div中的子项.

我们的想法是div是一个弹出式元素,而不是必须有一个用户可以点击的关闭按钮,他们应该只能点击除该div之外的页面上的任何地方,它将自动关闭.

我一直在使用这个监听器:

  1. var initialClick = false;
  2. $('body').on('click.addPhoneListeners',function(event) {
  3. var target = EventUtility.getTarget(event);
  4. if(initialClick) {
  5. if(target.parentNode.id != clone.id && target.id != '') {
  6. finish();
  7. };
  8. }
  9. initialClick = true;
  10. });

它会监听正文上的所有点击,除非点击来自我希望用户能够与之交互的元素,否则它会关闭.不幸的是,这仅适用于只有一级孩子的div.一旦我开始获得多个层次结构,例如:

  1. <div id="addressContainer">
  2. <div id="address" class="hidden row">
  3. <div class="row">
  4. <div id="address.primary" class="hidden">P</div>
  5. <div id="address.type"></div>
  6. <div id="address.street"></div>
  7. <div id="address.editButton" class="hidden"><a id="addressEditButton">Edit</a></div>
  8. <div id="address.deleteButton" class="hidden"><a id="addressDeleteButton">Delete</a></div>
  9. </div>
  10. <div class="row">
  11. <div id="address.city"></div>
  12. <div id="address.state"></div>
  13. <div id="address.zip"></div>
  14. </div>
  15. <input type="hidden" id="address.id"></input>
  16. </div>
  17. </div>

target.parentNode.id为我提供了对象父元素而不是addressContainer id,因此不起作用.是否在嵌套元素中使用顶级父级?其他元素将使用相同的代码,因此它必须处理两个div只有一个级别和div有多个.

更新:发现一些优秀的解决方案,谢谢你们.但我有另外一个问题.请参阅上面的代码,我将initialClick布尔值设置为false,然后将其设置为true.我这样做是因为出于某种原因,如果我不这样做,当我去添加弹出DIV,从用于设置弹出按钮的第一次点击触发听者并关闭弹出之前,我有机会做任何事情.这是我解决问题的方法,但这是唯一的方法吗?或者我只是设置听众略有错误

解决方法

我通常做这样的事情:
  1. $(document).click(function(e) {
  2. // hide popup
  3. });
  4.  
  5. $('#popup_div').click(function(e) {
  6. e.stopPropagation();
  7. });

这样,弹出窗口中的点击从不传播到文档,因此close函数永远不会触发.

猜你在找的jQuery相关文章