当 'change' 事件由鼠标与键盘触发时,CKEditor 是否提供 属性?

Does CKEditor provide a property for when the 'change' event was triggered by mouse vs keyboard?

CKEditor 是否提供 属性 当 'change' 事件由鼠标与键盘触发时?

在 'change' 事件调用中,我需要查看事件是如何触发的。在我的例子中,我有一个更改内容区域的脚本,并且需要对此采取行动,但不是在键盘导致更改时。

不,没有这样的信息。 editor#change 事件只是 CKEditor 撤消管理器的副作用,在某些情况下,它甚至可能在没有任何更改时被触发(文档提到了这一点)。这听起来很奇怪,但它以这种方式工作是有充分理由的。

有很多更改源 - 鼠标、键盘、粘贴(粘贴内容的方法有很多种)、剪切、工具栏中的按钮、editor.setData 调用以及外部代码所做的所有更改通过命令,也可以直接在编辑器的可编辑元素中。换句话说 - 不可能听到所有这些,因为没有代表所有这些的事件 "entry points".

因此您可以认为编辑器的撤消管理器至少可以监听键盘事件或拖放事件并记录这些更改(加上使用该信息触发 change 事件)。没有。例如,剪贴板插件侦听本机粘贴事件并将它们转换为更有用的 editor events. These events have listeners which then insert content into the editor, or remove it (in case of cutting). If undo manager listened to paste directly and something cancelled paste using editor events, then the undo manger would get confused. Instead, the undo manager expects that it will be notified about possible changes. This happens through the editor#saveSnapshot 事件。当某段代码知道它更改了内容时,它应该触发这些事件(更改之前和之后)。

这就是有关更改源的信息丢失的原因。之间有一长串事件。另外,在很多情况下,不清楚来源是什么。