1

简而言之

有没有一种方法可以在侦听本机事件时检测到 CKEditor 在传播到我的侦听器之前是否以某种方式使用了该事件,或者完全阻止它传播?

用例

我正在keyup使用 jQuery 监听事件,以检测何时escape按下。如果是,则提示用户是否要放弃更改,并且 CKEditor 实例被销毁并将其元素从 DOM 中删除。

$('body').on('keyup', function(e){
  if(e.which==27){
    CKEDITOR.instances.myDiv.destroy();
    $('#myDiv').remove();
  }
});

这里的问题是 CKEditor 允许用户使用escape键与某些 UI 元素进行交互。例如关闭对话窗口或下拉列表。

因此,如果CKEditor 尚未使用该事件来关闭它自己的 UI 元素,我的事件应该只执行它的代码。

试图

我试图听dialogShowdialogHide事件来检测对话窗口是否打开,因此应该忽略我的操作。这不起作用有两个原因:

  • CKEditor 首先处理事件,所以当事件传播到我的侦听器时,没有打开任何对话窗口并且我的代码被执行。
  • 即使它可以工作,它也不会用于下拉列表,因为它们不会触发dialog*事件。

想法

我对 CKEditor 的工作原理知之甚少,无法提出解决方案,但我想我正在寻找以下方面的东西:

  • CKEditor 中防止事件传播的设置:CKEDITOR.instances[0].noEventPropagation = true
  • 原始事件对象中的指示:if(event.CKEditorWasHere){/*do nothing*/}
  • 一个提供我可以使用的功能的插件。
  • 最坏的情况:dialogHide事件中的 setTimeout,我将用它来在短时间内抑制我自己的事件。

所以

也许我完全忽略了一些东西。在我看来,这似乎是一个常见问题,应该有一个简单的解决方案。

谢谢你的时间。

4

0 回答 0