jac*_*erg 97 javascript ckeditor
我正在使用jquery对话框来呈现表单(通过AJAX获取).在某些形式上,我使用CKEditor作为textareas.编辑器在第一次加载时显示正常.
当用户取消对话框时,我将删除内容,以便在以后的请求中重新加载它们.问题是,一旦重新加载对话框,CKEditor声称编辑器已经存在.
uncaught exception: [CKEDITOR.editor] The instance "textarea_name" already exists.
Run Code Online (Sandbox Code Playgroud)
API包含一种销毁现有编辑器的方法,我看到人们声称这是一个解决方案:
if (CKEDITOR.instances['textarea_name']) {
CKEDITOR.instances['textarea_name'].destroy();
}
CKEDITOR.replace('textarea_name');
Run Code Online (Sandbox Code Playgroud)
这对我不起作用,因为我收到了一个新错误:
TypeError: Result of expression 'i.contentWindow' [null] is not an object.
Run Code Online (Sandbox Code Playgroud)
这个错误似乎发生在"destroy()"而不是"replace()"上.有没有人经历过这个并找到了不同的解决方案
有可能"重新渲染"现有的编辑器,而不是破坏和替换它吗?
Tom*_*rda 97
要使其工作,您需要在销毁实例时传递布尔参数true:
var editor = CKEDITOR.instances[name];
if (editor) { editor.destroy(true); }
CKEDITOR.replace(name);
Run Code Online (Sandbox Code Playgroud)
小智 28
function loadEditor(id)
{
var instance = CKEDITOR.instances[id];
if(instance)
{
CKEDITOR.remove(instance);
}
CKEDITOR.replace(id);
}
Run Code Online (Sandbox Code Playgroud)
Min*_*ure 19
我也有这个问题,但我用更简单的方式解决了它...
我在我的jQuery脚本中使用类"ckeditor"作为我想要用于CKEditor的textareas的选择器.默认的ckeditor JS脚本也使用此类来标识要用于CKEditor的textareas.
这意味着我的jQuery脚本和默认的ckeditor脚本之间存在冲突.
我只是将textarea和我的jQuery脚本的类更改为'do_ckeditor'(你可以使用除"ckeditor"之外的任何东西)并且它有效.
adu*_*adu 11
这是对我有用的最简单(也是唯一)的解决方案:
if(CKEDITOR.instances[editorName])
delete CKEDITOR.instances[editorName];
CKEDITOR.replace(editorName);
Run Code Online (Sandbox Code Playgroud)
删除阵列中的此条目可防止此表单安全检查破坏您的应用程序.
destroy()和remove()对我没用.
也许这会帮助你 - 我使用jquery做了类似的事情,除了我正在加载未知数量的ckeditor对象.我花了一段时间才发现这一点 - 文档中并不清楚.
function loadEditors() {
var $editors = $("textarea.ckeditor");
if ($editors.length) {
$editors.each(function() {
var editorID = $(this).attr("id");
var instance = CKEDITOR.instances[editorID];
if (instance) { instance.destroy(true); }
CKEDITOR.replace(editorID);
});
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我为了从编辑中获取内容而运行的内容:
var $editors = $("textarea.ckeditor");
if ($editors.length) {
$editors.each(function() {
var instance = CKEDITOR.instances[$(this).attr("id")];
if (instance) { $(this).val(instance.getData()); }
});
}
Run Code Online (Sandbox Code Playgroud)
更新:我已经改变了我使用正确方法的答案 - 即.destroy()..remove()意味着内部,并且在某一时刻被错误地记录.
小智 5
var e= CKEDITOR.instances['sample'];
e.destroy();
e= null;
Run Code Online (Sandbox Code Playgroud)
小智 5
我有类似的问题,我们为通过ajax加载的内容制作了几个CKeditor实例.
CKEDITOR.remove()
将DOM保留在内存中并没有删除所有绑定.
CKEDITOR.instance [INSTANCE_ID] .destroy()
每当我使用来自ajax的新数据创建新实例时,都会出现错误i.contentWindow错误.但直到我发现我在清除DOM后才破坏了实例.
当实例&它的DOM出现在页面上时使用destroy(),然后它完全正常.
对于ajax请求,
for(k in CKEDITOR.instances){
var instance = CKEDITOR.instances[k];
instance.destroy()
}
CKEDITOR.replaceAll();
Run Code Online (Sandbox Code Playgroud)
此片段将删除文档中的所有实例。然后创建新实例。
归档时间: |
|
查看次数: |
127839 次 |
最近记录: |