我正在使用CKEditor作为wysiwyg编辑器。我的页面上有一些表单元素,它们通过Ajax调用加载。当我填写所有数据,包括wysiwyg编辑器,然后点击保存按钮没有保存任何内容。提交也是通过Ajax调用完成的。
由于CKEditor未正确更新原始textarea
,因此无法保存任何内容。我找到了一个答案,表示在提交之前执行以下::
for(var instanceName in CKEDITOR.instances) {
console.log(instanceName);
CKEDITOR.instances['element[1][content]'].updateElement();
}
每次提交表单前都会触发此操作。但是这段代码仍然没有用CKEditor的内容更新真正的textarea ......
任何人都知道如何解决这个问题?
我正在使用最新的CKEditor (3.6.5,2012年10月10日发布)。
通过Firefox的控制台注意到,当我运行以下命令时,updateElement()
未定义:
CKEDITOR.instances['element[1][content]'].updateElement();
但是当我运行它时,它会返回一个对象:
CKEDITOR.instances['element[1][content]'];
答案 0 :(得分:1)
你的第一个代码很糟糕。为什么在同一对象上调用方法时使用循环?这个更好:
for(var instanceName in CKEDITOR.instances) {
CKEDITOR.instances[ instanceName ].updateElement();
}
如果仍有问题,请分享您用于创建编辑器的代码。也许你的textareas与编辑器实例错误关联。
答案 1 :(得分:1)
有另一种解决方案,您可以在ckeditor中添加数据而无需编辑实例值。
e.g。
在视图中的脚本部分中:
<script>
$(function(){
$("#editBasic").click(function(){
url = "<?=$this->webroot?>derivedItineraries/getDetail/<?=$derived_itinerary_id?>";
var div = '#basic_detail';
var data = {id: 1};
callajax(url, data, $(div));
return false;
});
});
</script>
在Ajax调用函数中:
function callajax2(url, data, divname){
$.ajax({
type : 'POST',
url : url,
dataType : 'text',
data: data,
success: function(data) {
divname.text('');
divname.append(data);
divname.show(500);
if (data.error === true)
divname.show(500);
}
});
return false;
}
在控制器页面中:
public function getDetail($id = null) {
$this->request->onlyAllow('ajax');
$this->viewClass = 'Json';
$this->loadModel('Destination');
$this->DerivedItinerary->recursive = -1;
$derivedItineraries = $this->DerivedItinerary->findById($id);
$destination_covered = $this->destination_covered($id);
$destinations = $this->Destination->find('list');
$arrData=array(
'itinerary'=>$derivedItineraries,
'destination_covered' => $destination_covered,
'destinations' => $destinations
);
$this->set('data', $arrData);
$this->render('derived_basic', 'ajax');
}
View中应该有一个文件,名为“ControllerName”/json/derived_basic.ctp
“derived_itineraries / json / derived_basic.ctp”中的文件内容:
<?php
echo $this->Html->script('/ckeditor/ckeditor', false);
echo $this->Form->create();
echo $this->Form->input('inclusion', array('type'=>'textarea', 'class'=>'ckeditor', 'required'=>'true', 'div'=>'required', 'style'=>'width:200px;', 'value'=> "Test data"))." </td></tr>";
echo $this->Form->end();
?>
试试吧。
答案 2 :(得分:0)
您可以在ajax之后使用done()
和then()
方法
$.ajax({
type: "POST",
url: url
}).done(function(data){
$('#content').html(data);
}).then(function(){
//create ckeditor
});