简而言之
有没有一种方法可以在侦听本机事件时检测到 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 元素,我的事件应该只执行它的代码。
试图
我试图听dialogShow
和dialogHide
事件来检测对话窗口是否打开,因此应该忽略我的操作。这不起作用有两个原因:
- CKEditor 首先处理事件,所以当事件传播到我的侦听器时,没有打开任何对话窗口并且我的代码被执行。
- 即使它可以工作,它也不会用于下拉列表,因为它们不会触发
dialog*
事件。
想法
我对 CKEditor 的工作原理知之甚少,无法提出解决方案,但我想我正在寻找以下方面的东西:
- CKEditor 中防止事件传播的设置:
CKEDITOR.instances[0].noEventPropagation = true
- 原始事件对象中的指示:
if(event.CKEditorWasHere){/*do nothing*/}
- 一个提供我可以使用的功能的插件。
- 最坏的情况:
dialogHide
事件中的 setTimeout,我将用它来在短时间内抑制我自己的事件。
所以
也许我完全忽略了一些东西。在我看来,这似乎是一个常见问题,应该有一个简单的解决方案。
谢谢你的时间。