使用javascript检测在div外部点击

31 javascript

我想检测div区域内外的点击.棘手的部分是div将包含其他元素,如果单击div中的一个元素,则应将其视为内部单击,如果单击div外部的元素,则应将其视为外部单击.

我一直在研究很多,但我能找到的只是jquery中的例子,我需要纯粹的javascript.

任何建议将不胜感激.

Jam*_*ubb 74

它取决于个别用例,但听起来像在这个例子中,主div内可能有其他嵌套元素,例如更多的div,列表等.使用Node.contains将是检查目标元素是否在内的有用方法正在检查的div.

window.addEventListener('click', function(e){   
  if (document.getElementById('clickbox').contains(e.target)){
    // Clicked in box
  } else{
    // Clicked outside the box
  }
});
Run Code Online (Sandbox Code Playgroud)

这里有一个嵌套列表的例子.

  • `if (!document.getElementById('clickbox').contains(e.target)){ // Clicked Outside box }` 也许是一个可行且更短的解决方案? (3认同)
  • 这是可行的,但并不完美。单击内部“绝对”定位元素时它不起作用。我们可以处理这个案子吗? (3认同)
  • 而不是使用 `window.addEventListener` 使用 `document.addEventListener` 它会完成这项工作,特别是在 js 框架(vue、react 和 Angular)中 (2认同)

moh*_*him 6

您可以检查单击的 Element 是否是您要检查的 div:

document.getElementById('outer-container').onclick = function(e) {
  if(e.target != document.getElementById('content-area')) {
      console.log('You clicked outside');
  } else {
      console.log('You clicked inside');
  }
}
Run Code Online (Sandbox Code Playgroud)

参考这里

  • 对于它的价值 - 您最好使用“.addEventListener”添加侦听器 - 您可以删除它,但更重要的是,您可以设置许多在收到事件时触发的函数。您还可以对处理事件的函数内的“this”关键字进行有意义的访问,然后“this”解析为元素本身 - 例如,很高兴知道哪个元素触发了事件。您还可以获得触发事件的事件对象首先是处理程序。无论如何,附加事件处理程序的方法要强大得多。:) (2认同)