无法获取 CKEditor 的实例

Posted

技术标签:

【中文标题】无法获取 CKEditor 的实例【英文标题】:Cannot get instance of CKEditor 【发布时间】:2020-01-09 22:11:39 【问题描述】:

我有几个需要用CKEditor 初始化的字段,为此我创建了一个包含initEditor 方法的帮助类。

下面的方法应该返回初始化的编辑器,但它没有:

window.CKEditorHelper = window.CKEditorHelper || ;

(function (exports) 

    exports.initEditor = function (input, myEditor) 
        ClassicEditor
            .create(document.querySelector(input), 
                language: 
                    ui: 'en'
                    content: 'en'
                
            )
            .then(editor => 
                myEditor = editor;
            );
    ;

)(window.CKEditorHelper);

这是通过以下方式调用的:

let editor = null;
CKEditorHelper.initEditor('#description', editor);

所以当我点击一个按钮时:

$('#save').on('click', function()
    console.log(editor.getData());
);

我明白了:

无法读取 null 的属性“getData”

我做错了什么?

【问题讨论】:

【参考方案1】:

您的代码存在一些问题

让编辑器 = null;

let 关键字只在函数范围内定义一个变量,当您在另一个范围(您的点击句柄事件)上使用 editor 时,它可能是未定义的

另一行

myEditor = 编辑器;

这很简单,对您原来的 editor 对象的引用将消失

这是我的解决方案

改变你启动编辑器的方式,如下所示

window.editorInstance = editor: null;
CKEditorHelper.initEditor('#description', editorInstance);

将您的 CKEditorHelper 更改为

window.CKEditorHelper = window.CKEditorHelper || ;

(function (exports) 

exports.initEditor = function (input, myEditorInstance) 
    ClassicEditor
        .create(document.querySelector(input), 
            language: 
                ui: 'en'
                content: 'en'
            
        )
        .then(editor => 
            myEditorInstance.editor = editor;
        );
;

)(window.CKEditorHelper);

当你想使用你的编辑器时

console.log(editorInstance.editor.getData());

【讨论】:

我必须等待 7 小时才能分配赏金,无论如何问题已解决,谢谢 :)【参考方案2】:

你可以用javascript给出这个

$(document).ready(function () 
  CKEDITOR.replace('tmpcontent',  height: '100px' )
)

使用下面的方法取值

$('#save').on('click', function()
 var textareaValue = CKEDITOR.instances.tmpcontent.getData();
);
<label class="control-label">Message</label>
<textarea name="tmpcontent" id="tmpcontent" class="form-control"></textarea>

//或在最新版本中

var myEditor;

ClassicEditor
    .create( document.querySelector( '#description' ) )
    .then( editor => 
        console.log( 'Editor was initialized', editor );
        myEditor = editor;
     )
    .catch( err => 
        console.error( err.stack );
     );

然后使用获取数据

myEditor.getData();

【讨论】:

我收到CKEDITOR 未定义,我使用的是最新版本“5”,仅使用ClassicEditor 无法使用CKEDITOR 访问此版本。谢谢你的回答 @sfarzoso 用ClassicEditor检查我的第二个解决方案 我找不到与第二种解决方案的代码有任何区别,请您解释一下吗?

以上是关于无法获取 CKEditor 的实例的主要内容,如果未能解决你的问题,请参考以下文章

如何从 CKEditor 5 实例中获取数据

如何使用ng-repeat获取ckeditor的实例?

CKEDITOR:从Javascript中的多个实例名称中获取数据

如何正确销毁 CKEditor 实例?

CKEditor 实例已经存在

CKEditor5-Vue 自动保存问题。我无法在自动保存功能中调用实例