【问题标题】:close html5 dialog by clicking outside of it通过单击外部关闭 html5 对话框
【发布时间】:2021-11-24 00:10:09
【问题描述】:

我已经在一个网页中实现了几个 html5 对话框。我想让用户单击对话框外部以关闭它,而不是使用关闭按钮或需要 {escape} 按键来弄乱对话框。关于这个问题的许多查询都是针对异国情调的 js 库,但我想使用纯 JS 而不是 jquery。

JS

// HALFHIDE
function openHALFHIDEdialog() {
var dialogHALFHIDEsource_O = document.getElementById("S-HALFHIDE");
dialogHALFHIDEsource_O.showModal();
}

function closeHALFHIDEdialog() {
var dialogHALFHIDEsource_C = document.getElementById("S-HALFHIDE");
dialogHALFHIDEsource_C.close(); }

HTML

<!-- S. HALFHIDE -->
<div class = "generic_dialog_container">
<dialog class = "generic dialog" id = "S-HALFHIDE">

<p>Blah blah blah</p>

</dialog></div>
<!-- END S HALFHIDE -->

我该怎么做?

【问题讨论】:

  • 这能回答你的问题吗? Can't close modal when I click outside of it
  • 鉴于我的 div 类和对话框类,一个简单的单行解决方案,用于检测这些元素之外的点击并调用关闭函数是最简洁最简洁的解决方案。真的不需要写十几行或更多行 JS,是吗?
  • 版主,您遇到的问题是dialog 元素在其处于打开状态时占据了整个窗口。因此,网页内的所有点击,在模式打开后,注册为对对话框元素的点击,这说明您将处于一个更好的位置来编写自己的模式,给定dialogelement 甚至在一些仍然相关的浏览器(例如 Firefox 和 Safari)中都不受支持。

标签: javascript dialog


【解决方案1】:

这让我对dialog 元素进行了大量研究。只是一个警告,正如我在 cmets 中提到的,dialog 元素缺乏支持,因为 Safari 或 Firefox 不支持它。

这是您可以运行的包含解决方案的 REPL:https://replit.com/@heyitsmarcus/Dialog#index.html

但是,我确实在这里找到了适用于 Stack Overflow 的解决方案:How to close the new html <dialog> tag by clicking on its ::backdrop

dialog.addEventListener('click', function (event) {
    var rect = dialog.getBoundingClientRect();
    var isInDialog=(rect.top <= event.clientY && event.clientY <= rect.top + rect.height
      && rect.left <= event.clientX && event.clientX <= rect.left + rect.width);
    if (!isInDialog) {
        dialog.close();
    }
});

【讨论】:

  • 这是一个非常好的解决方案,因为它引用了对话框本身,而不是让我编写 ID 150 X 引用的其他代码。
  • 您永远不必这样做。即使在此对话框元素之外,也始终使用类将您的元素组合在一起。他们很强大!
猜你喜欢
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 2023-02-16
  • 2016-07-16
  • 2016-01-21
  • 1970-01-01
相关资源
最近更新 更多