首页 > 解决方案 > CKEDITOR 不起作用并且出现错误 can not read property 'getEditor' at ckeditor.js:321

问题描述

这是我的 JavaScript 代码:

var data = data.Data;
var html = "";      
for(var i = 0; i<data.length;i++){
     html = html +'<div class="form-group">'+
                       '<label class="control-label col-lg-2">Hasil Rapat</label>'+
                       '<div class="col-lg-10">'+
                           '<textarea rows="20" id="rapat" class="form-control rapat" name="hasil_rpt">'+data[i].hasil_rpt+'</textarea>'+
                       '</div>'+  
                   '</div>'
}

我在 textarea 中包含了 id:

<textarea rows="20" id="rapat" class="form-control rapat" name="hasil_rpt">'+data[i].hasil_rpt+'</textarea>

而且我也已经使用:

CKEDITOR.replace('rapat');

标签: javascript

解决方案


我看到的第一个危险信号是 CKEditor 不知道如何使用您的逻辑。我不确定您使用的是哪个版本的 CKEditor,因为在 v5 中情况发生了巨大变化。但是,我认为你需要做的是:

var data = data.Data;
var html = "";      
for(var i = 0; i<data.length;i++) {
        var id = 'editorId_' + i;
     html = html +'<div class="form-group">'+
                       '<label class="control-label col-lg-2">Hasil Rapat</label>'+
                       '<div class="col-lg-10">'+
                           '<textarea rows="20" id="'+ id + '" class="form-control rapat" name="hasil_rpt">'+data[i].hasil_rpt+'</textarea>'+
                       '</div>'+  
                   '</div>';
    CKEDITOR.replace(id);
}

我不确定您CKEDITOR.replace从哪里调用,但它应该在for循环内或在完成将 html 添加到 DOM 的循环后的单独循环中。您的代码不起作用的原因是因为您最终得到了多个 id,并且 id 应该是唯一的。CKEDITOR 很可能会因此而绊倒。

编辑

上面的代码不起作用,因为 CKEDITOR 需要您的元素引用存在(并呈现)在 DOM 中。一旦该元素准备就绪,您就可以调用CKEDITOR.replace. 与此类似的流程可能会起作用:

var data = data.Data;
var parentElement = ''; // <-- Get the reference to your container element here
for(var i = 0; i<data.length;i++) {
        var id = 'editorId_' + i;
     var html +'<div class="form-group">'+
                       '<label class="control-label col-lg-2">Hasil Rapat</label>'+
                       '<div class="col-lg-10">'+
                           '<textarea rows="20" id="'+ id + '" class="form-control rapat" name="hasil_rpt">'+data[i].hasil_rpt+'</textarea>'+
                       '</div>'+  
                   '</div>';
    parentElement.appendChild(html);
    CKEDITOR.replace(id);
}

推荐阅读