当焦点在 contenteditable div 上时删除所有侦听器

Posted

技术标签:

【中文标题】当焦点在 contenteditable div 上时删除所有侦听器【英文标题】:Remove all listeners when focus is on contenteditable div 【发布时间】:2019-12-19 12:28:06 【问题描述】:

我的页面上有多个 keydown 和 keyup 监听器。当焦点位于特定的 contenteditable div 上时,我想禁用这些事件。

我该怎么做?

例如,点击空格会暂停我的视频,但我不希望在编辑 contenteditable div 时触发它。

【问题讨论】:

【参考方案1】:

在监听器内部,当事件被触发时,检查event.target 是否有 contenteditable div 的祖先,您想忽略其事件。例如:

window.addEventListener('keydown', ( target ) => 
  if (target.closest('#noevent')) 
    // event was fired on an element which is, or is a descendant 
    // of the noevent element
    // so, stop execution of the listener
    return;
  
  console.log('listener function continuing...', Date.now());
);
<div>normal content</div>
<div contenteditable>editable content</div>
<div contenteditable id="noevent">editable content which will not trigger listener</div>

请注意,这不是移除监听器 - 而是编程逻辑进入监听器以忽略某些事件,这可能比移除和重新附加听众自己。

【讨论】:

以上是关于当焦点在 contenteditable div 上时删除所有侦听器的主要内容,如果未能解决你的问题,请参考以下文章

React:编辑contentEditable div时如何保持插入位置?

重要重要如何在div是contentEditable=true的里面获取光标的位置,并在光标位置处插入内容。焦点位置插入指定内容

div设置contenteditable="true",即可编辑,我想做一个按钮,点击它之后,焦点处就自动出现一个可编辑的

如何使用 contentEditable 和大小样式删除调整大小手柄和 div 边框

双击内部带有 contenteditable 的 div 并且 iframe 禁用 div

焦点内容可编辑 div