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错误以外的任何东西。
希望有所帮助