Javascript 仅当单击元素而不是其子元素时触发事件

Javascript 仅当单击元素而不是其子元素时触发事件,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,如果我将click处理程序绑定到body元素,当我单击页面上的任何内容时,就会触发事件。我可以在每次单击时查看事件。target: $("body").on("click", function(event) { if (event.target.tagName == "BODY") { ... } }); 但这似乎有点过分了。只有当单击身体本身的空白区域时,是否有触发事件的方法? ,如果单击的元素有一个体父,则可以检查每一次单击。如果条件为false,则单击主体: $("bod

如果我将
click
处理程序绑定到
body
元素,当我单击页面上的任何内容时,就会触发事件。我可以在每次单击时查看
事件。target

$("body").on("click", function(event) {
  if (event.target.tagName == "BODY") {
    ...
  }
});

但这似乎有点过分了。只有当单击身体本身的空白区域时,是否有触发事件的方法?

,如果单击的元素有一个体父,则可以检查每一次单击。如果条件为false,则单击主体:

$("body").on("click", function(event) {
  if ($(this).parents('body').length == 0) {
     //Do something
  }
});
在我看来,这不是一个好的实践,但这取决于您的代码和项目

希望能有帮助


干杯。

如果每次单击时都检查所单击的元素是否有主体父元素,则可以执行此操作。如果条件为false,则单击主体:

$("body").on("click", function(event) {
  if ($(this).parents('body').length == 0) {
     //Do something
  }
});
在我看来,这不是一个好的实践,但这取决于您的代码和项目

希望能有帮助

干杯。

你应该在

event.stopPropagation()
在所有你不想泡泡的孩子身上

jQuery文档:。您应该在

event.stopPropagation()
在所有你不想泡泡的孩子身上

jQuery文档:.您可以使用event的属性。值
2
表示事件当前正在触发目标元素:

$("body").on("click", function(event) {
    //Cancel if not at target
    if (event.eventPhase != 2) return;

    //Other Code Here
});
在这里摆弄:

您可以使用event的属性。值
2
表示事件当前正在触发目标元素:

$("body").on("click", function(event) {
    //Cancel if not at target
    if (event.eventPhase != 2) return;

    //Other Code Here
});

小提琴:我想你指的是孩子而不是兄弟姐妹。有多少页面正文没有其他元素覆盖?通常一点也不多——边缘有一点填充物。我认为你应该防止
冒泡
!?!我想你指的是孩子而不是兄弟姐妹。有多少页面正文没有其他元素覆盖?通常一点也不多——边缘有一点填充物。我认为你应该防止
冒泡
!?!这不仅仅是杀伤力过大(用OP自己的话来说)。@MelanciaUK是的,这是一个很小的底线p这不仅仅是杀伤力过大(用OP自己的话来说)。@MelanciaUK是的,这是一个很小的底线PThats a.w.e.s.o.m.e!!那是a.w.e.s.o.m.e!!按照您的解释,主体内的任何嵌套元素都将触发单击,以及单击整个页面的
标记或
窗口。但是,您的代码仅在
窗口
案例中中断。按照您的解释,正文中的任何嵌套元素都将触发单击,以及单击整个页面的
标记或
窗口
。但是,您的代码仅在
窗口中出现中断。