【问题标题】:Javascript - stop a modal keyboard event from bubbling / propagatingJavascript - 阻止模态键盘事件冒泡/传播
【发布时间】:2020-03-24 23:07:58
【问题描述】:

我有一个页面,它有一个keydown 事件侦听器,用于侦听 Escape 键,然后导航回来。我还有一个简单的模态类,它还监听 Escape 键来关闭它。主页面监听器检查一个模态是否打开,如果是,则返回而不做任何事情。

window.addEventListener("keydown", function (ev) {
                                           if (modal_is_open) { return; }
                                           ev = ev || window.event;
                                           if (ev.key == "Escape") { history.go(-1); }
                                         });

modal_div.addEventListener("keydown",function (ev) {
                                           ev = ev || window.event;
                                           ev.stopPropagation();
                                           ev.preventDefault();
                                           ev.cancelBubble = true;
                                           if (ev.key == "Escape") { close_the_modal(); }
                                           return false;
                                         });

我的问题是,如果模式打开,Escape 键将其关闭,但仍会冒泡到主页面处理程序并导航回来。我怎样才能阻止这种情况?

【问题讨论】:

  • 您确定该事件源自 modal_div 内部吗?如果不是,它不会被处理程序捕获。
  • modal_div 处理程序正在触发,当按下 Esc 时,模态会关闭,在主页导航返回之前短暂关闭

标签: javascript event-bubbling


【解决方案1】:

我终于找到了解决方案,将stopPropagation 替换为stopImmediatePropagation,如果模态打开,窗口keydown 处理程序将不再触发。

【讨论】:

    猜你喜欢
    • 2021-07-01
    • 2011-12-09
    • 2023-03-31
    • 2021-09-05
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多