我想让ckeditor工作。显然它没有使用textarea所以提交表单不会在编辑器中提交文本。因为我使用了多态关联等。我不能使用onsubmit函数来获取textarea的值(当提交表单时)。
所以我发现了这个问题:Using jQuery to grab the content from CKEditor's iframe
有一些非常好的答案。在那里发布的答案使textarea保持最新。这非常好,正是我需要的!不幸的是我无法让它发挥作用。 有人知道为什么(例如)这不起作用吗?
我有一个textarea(rails但它只是翻译成普通的textarea):
<%= f.text_area :body, :id => 'ckeditor', :rows => 3 %>
以下js:
if(CKEDITOR.instances.ckeditor ) {
CKEDITOR.remove(CKEDITOR.instances.ckeditor);
}
CKEDITOR.replace( 'ckeditor',
{
skin : 'kama',
toolbar :[['Styles', 'Format', '-', 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList', 'Link']]});
CKEDITOR.instances["ckeditor"].on("instanceReady", function()
{
//set keyup event
this.document.on("keyup", CK_jQ);
//and paste event
this.document.on("paste", CK_jQ);
}
function CK_jQ()
{
CKEDITOR.instances.ckeditor.updateElement();
}
我的萤火虫中出现以下“错误”。
missing ) after argument list
[Break on this error] function CK_jQ()\n
答案 0 :(得分:110)
在提交之前:
for(var instanceName in CKEDITOR.instances)
CKEDITOR.instances[instanceName].updateElement();
答案 1 :(得分:54)
我正在使用带有jQuery表单提交处理程序的CKEditor版本3.6.1。提交textarea是空的,这对我来说是不正确的。但是,您可以使用一种简单的解决方法,假设所有CKEditor textareas都具有css类 ckeditor 。
$('textarea.ckeditor').each(function () {
var $textarea = $(this);
$textarea.val(CKEDITOR.instances[$textarea.attr('name')].getData());
});
在进行提交处理之前执行上述操作即。表格验证。
答案 2 :(得分:9)
将上述所有答案合二为一。
创建一个新的custom.js文件并添加:
CKEDITOR.on('instanceReady', function(){
$.each( CKEDITOR.instances, function(instance) {
CKEDITOR.instances[instance].on("instanceReady", function() {
this.document.on("keyup", CK_jQ);
this.document.on("paste", CK_jQ);
this.document.on("keypress", CK_jQ);
this.document.on("blur", CK_jQ);
this.document.on("change", CK_jQ);
});
});
});
function CK_jQ() {
for ( var instance in CKEDITOR.instances ) { CKEDITOR.instances[instance].updateElement(); }
}
您不必担心textarea的名称,只需在textarea中添加一个类ckeditor
,上面就完成了。
答案 3 :(得分:8)
感谢@JohnDel提供的信息,我使用onchange使其更新每次更改。
CKEDITOR.on('instanceReady', function(){
$.each( CKEDITOR.instances, function(instance) {
CKEDITOR.instances[instance].on("change", function(e) {
for ( instance in CKEDITOR.instances )
CKEDITOR.instances[instance].updateElement();
});
});
});
答案 4 :(得分:5)
ADD功能JavaScript更新
function CKupdate() {
for (instance in CKEDITOR.instances)
CKEDITOR.instances[instance].updateElement();
}
这是工作。凉爽
答案 5 :(得分:1)
添加
CKEDITOR.instances.textAreaClientId.on('blur', function(){CKEDITOR.instances. textAreaClientId.updateElement();});
其中textAreaClientId
是您的实例名称
此致
答案 6 :(得分:1)
我只是将其增加到T.J.为我工作:
orders
答案 7 :(得分:0)
CKEDITOR.instances["ckeditor"].on("instanceReady", function()
{
//set keyup event
this.document.on("keyup", CK_jQ);
//and paste event
this.document.on("paste", CK_jQ);
})
答案 8 :(得分:0)
正在加载:
$(function () {
setTimeout(function () {
function CK_jQ(instance) {
return function () {
CKEDITOR.instances[instance].updateElement();
};
}
$.each(CKEDITOR.instances, function (instance) {
CKEDITOR.instances[instance].on("keyup", CK_jQ(instance));
CKEDITOR.instances[instance].on("paste", CK_jQ(instance));
CKEDITOR.instances[instance].on("keypress", CK_jQ(instance));
CKEDITOR.instances[instance].on("blur", CK_jQ(instance));
CKEDITOR.instances[instance].on("change", CK_jQ(instance));
});
}, 0 /* 0 => To run after all */);
});
答案 9 :(得分:-1)
以上所有答案都集中在如何修复此错误,但我想找出导致我这个错误的答案
我有一个
<textarea class="ckeditor" rows="6" name="Cms[description]"></textarea>
更改为
<textarea class="ckedit" rows="6" name="Cms[description]"></textarea>
我将类属性值更改为除 ckeditor 以外的任何内容以及繁荣错误消失。
希望有帮助