Javascript 如何知道单击事件是否起源于div之外?

Javascript 如何知道单击事件是否起源于div之外?,javascript,jquery,Javascript,Jquery,单击按钮时,会触发执行以下操作的功能: function doThings() { 1. display an overlay 2. display table on top of overlay 3. assign event for table click 4. assign event for everything else BUT table click } 4.的思想是处理除我的表或更具体地说,在我的表div内以外的任何地方产生的点击。以下是我尝试过的: fu

单击按钮时,会触发执行以下操作的功能:

function doThings() {
   1. display an overlay
   2. display table on top of overlay
   3. assign event for table click
   4. assign event for everything else BUT table click
}
4.
的思想是处理除我的
或更具体地说,在我的
表div
内以外的任何地方产生的点击。以下是我尝试过的:

function doThings() {
   // 1. display an overlay
   // 2. display table on top of overlay
   // 3. assign event for table click (interaction happens here)

   // 4.
   $("body").not( ".table-div" ).click(function(e) {
       // hide my overlay and stop interaction
   });
}
问题是,当添加
4.
时,单击“我的”按钮时,部分
3.
中编码的交互不会开始。我也试过:

   // 4.
   $("body").click(function(e) {
      if ( ! (e.target.class == "table-div" || $(e.target).parents(".table-div").size()) ) { 
         // hide my overlay and stop interaction
      }
   });

它们都不起作用。我假设
body
click事件和
table div
click事件之间存在冲突,但我不确定如何解决它。有没有办法让这一切顺利进行?谢谢大家!

因此,我想您需要通过以下方式停止事件传播:

 event.stopPropagation();  
在3点时,你需要使用它

三点。因为事件往往会冒出泡沫,而你没有处理它。似乎有可能。所以,您只需要处理事件传播。从而阻止事件冒泡


应该是这样的:

   $( ".table-div" ).click(function(e) {
        e.stopPropagation(); // <---here
$(“.table div”)。单击(函数(e){

e、 stopPropagation();//您可以共享您的代码或为其创建一个提琴吗?我在#3尝试了此操作,但没有任何影响。如果删除#4,则第#3部分工作正常。一旦引入#4,第#3部分将停止工作,且没有任何运行时错误。您是否在click事件的回调参数中传递了该事件?