events - CKEDITOR.setData 防止使用 .on 函数附加事件

标签 events ckeditor

我已经构建了一些自定义插件,但只有一个是监听键盘的按键事件。
在代码下方,您可以看到设置事件的设置。 (这有点基本)

现在我遇到了以下问题,如果我在 instanceReady 监听器中使用 editor.setData 设置我的数据,则未设置 .on 函数。

我确实尝试用 instanceReady 事件替换 contentDom ,但这也不能解决它。

如果我手动设置数据:editor.document.getBody().setHtml(html),没有问题。并且所有事件都没有任何问题。

CKEDITOR.plugins.add( 'myPlugin', {
    lang: '', // %REMOVE_LINE_CORE% 

    init: function( editor ) {

        //Bind events if the Dom is ready!
        editor.on( 'contentDom', function()
        {
                //keydown
                editor.document.on('keydown', function(e)
                {

有谁知道为什么会这样? setData 函数是只设置 html 还是重新加载编辑器之类的?

我确实看过这个 Ckeditor Source
但我认为这不是与 setData 函数有关的代码。

我不是在寻求解决方案。我喜欢理解为什么会这样。

最佳答案

Editor#contentDom 每次设置新的内部文档时都会触发。带框编辑器 editor#setData()不仅替换 body.innerHTML但整个文档,所以 contentDom每次都被解雇。

因此,您的代码会在每个 setData() 上添加新的监听器。但你不会删除旧的。由于不清楚的原因,这两个听众现在都没有在 keydown 上被解雇。 .我最近发现了这一点,我无法解释这个事实。

无论如何,您需要分离 editor#contentDomUnload 上的所有监听器.幸运的是,使用 editable#attachListener 可以方便地做到这一点。 .

editor.on( 'contentDom', function() {
    var editable = editor.editable();

    editable.attachListener( editor.document, 'keydown', function() {
        ...
    } );
} );

监听器将在下一个 contentDomUnload 自动分离.

关于events - CKEDITOR.setData 防止使用 .on 函数附加事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16054070/

相关文章:

actionscript-3 - AS3 阶段 = 空?

objective-c - touches 在 UIView 与 UIViewControllers 中的触摸事件处理

ios - 使用 Graph API 创建关闭或 secret 事件

javascript - 编辑器 : Attache "keydown" event after SetData?

macos - CKEditor 和 NSColorPanel : a mystery

javascript - 使用 IE 9 和 10 时出现 js 错误

python - 在 wxPython 中覆盖 KeyDown 事件

javascript - "jquery-Target has no method .css()"

ckeditor - 基于 div 的编辑器

ckeditor - 如何修复屏幕上的ckeditor工具栏?