【问题标题】:Pause event listeners in the background在后台暂停事件监听器
【发布时间】:2016-09-25 07:59:22
【问题描述】:

我有一个事件监听器

document.onkeyup = function (event) {
};

但我正在打开一个模式窗口(只是一个简单的 div 和 position: absolute; width: 100%; height: 100%; left: 0; top: 0)。

问题是当我在这个模态中输入表单时,按键事件监听器仍在后台监听,所以当模态窗口再次隐藏时,页面已经做了很多更改,因为键事件监听器。

如何在模式窗口打开时在后台暂停事件侦听器?我希望模态窗口的行为类似于prompt(),这使得页面上的其他所有内容都等待它完成。

【问题讨论】:

  • 您不能暂停事件监听器。您可以做的是在打开模式时设置标志变量,并在侦听器中检查是否设置了标志。然后在关闭模式时重置标志。您还可以在打开模式时分离事件,并在关闭它时再次附加。第三种选择是为模式设置一个 keyup 侦听器,并防止事件传播。
  • 好建议!谢谢

标签: javascript css prompt


【解决方案1】:

您可以通过以下方式临时分离事件处理程序:

document._onkeyupHolder = document.onkeyup;
document.onkeyup = null;

当你完成模态窗口后,将它附加回来:

document.onkeyup = document._onkeyupHolder; 
document._onkeyupHolder = null;

当然,要完全模拟提示,您还必须对其他事件执行相同操作。

【讨论】:

  • 这就是例如 bootstrap 在其模态中所做的吗?
  • @Jamgreen 如果我错了,请纠正我,但我认为引导模式不会阻止主 html 上的事件处理程序。
猜你喜欢
  • 2012-05-24
  • 2019-11-26
  • 2023-03-14
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多