Ckeditor更新textarea

我正试图让ckeditor工作。 显然它没有使用textarea等提交表单不提交编辑器中的文本。 除了使用多态关联等,我不能做一个onsubmit函数来获取textarea的值(当提交表单时)。

所以我发现这个问题: 使用jQuery从CKEditor的iframe中获取内容

有一些非常好的答案。 张贴在那里的答案保持textarea最新。 这是非常好的,正是我所需要的! 不幸的是我不能得到它的工作。 有人知道为什么(例如)这是行不通的?

我有一个textarea(轨道,但它只是翻译成一个正常的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

你有想过吗?

我正在使用CKEditor版本3.6.1与jQuery表单提交处理程序。 提交textarea是空的,这对我来说是不正确的。 但是,有一个简单的解决方法,你可以使用,假设所有的CKEditor文本都有css类ckeditor

 $('textarea.ckeditor').each(function () { var $textarea = $(this); $textarea.val(CKEDITOR.instances[$textarea.attr('name')].getData()); }); 

在你做提交处理之前执行上面的操作。 表单validation。

在提交之前:

 for(var instanceName in CKEDITOR.instances) CKEDITOR.instances[instanceName].updateElement(); 

所有上述答案组合成一个。

创build一个新的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中添加一个class ckeditor ,上面的操作就完成了。

感谢@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(); }); }); }); 

添加functionJavaScript的更新

 function CKupdate() { for (instance in CKEDITOR.instances) CKEDITOR.instances[instance].updateElement(); } 

是工作。 凉

只需添加

 CKEDITOR.instances.textAreaClientId.on('blur', function(){CKEDITOR.instances. textAreaClientId.updateElement();}); 

其中textAreaClientId是您的实例名称

问候

 CKEDITOR.instances["ckeditor"].on("instanceReady", function() { //set keyup event this.document.on("keyup", CK_jQ); //and paste event this.document.on("paste", CK_jQ); }) 

以上所有的答案都集中在如何解决这个错误,但我想就什么原因导致我这个错误的答案

我曾有一个

 <textarea class="ckeditor" rows="6" name="Cms[description]"></textarea> 

变成

 <textarea class="ckedit" rows="6" name="Cms[description]"></textarea> 

我把class属性值改成ckeditor和boom错误以外的任何东西。

希望有所帮助