首先,我不会t really now how to explain this but its sounds complicated to me. It makes my brain broken and I really don
知道是否有人可以帮助我解决CKeditor的问题。
我的控制器代码:
public function reply_topic()
{
$this->load->helper('form');
$this->load->library('form_validation');
$this->form_validation->set_rules('comment', 'Comment Field Required', 'required');
//$this->form_validation->set_rules('g-recaptcha-response', 'recaptcha validation', 'required|callback_validate_captcha');
//$this->form_validation->set_message('validate_captcha', 'Please check the the captcha form');
if ($this->form_validation->run() == FALSE)
{
$this->load_reply_to_topic_view($this->input->post('topic_id'));
}
else
{
$topic_id = $this->input->post('topic_id');
$this->topic_model->postReplyTopic();
echo '<div class="alert alert-success">'.lang_key('reply_submited').'</div>';
$this->load_reply_to_topic_view($topic_id='');
}
}
这个代码开始工作正常没有问题。但是当我尝试提交数据时,总会出现错误。 就像评论字段为空一样,即使我已经将数据估算到评论部分 - 如果我使用CKeditor,也会出现此错误。但如果我只使用普通的textarea它真的很好。
<!-- Javascript -->
<script type="text/javascript">
CKEDITOR.replace( 'comment' );
</script>
以下是评论部分出现的代码
<script type="text/javascript">
var loadUrl = '<?php echo base_url("threads/load_reply_to_topic_view/".$item['id']);?>';
jQuery.post(
loadUrl,
{},
function(responseText){
jQuery('.reply-topic-form-holder').html(responseText);
init_reply_topic_js();
}
);
function init_reply_topic_js()
{
jQuery('#replytopic-form').submit(function(e){
var data = jQuery(this).serializeArray();
jQuery('.topic-loading').show();
e.preventDefault();
var loadUrl = jQuery(this).attr('action');
jQuery.post(
loadUrl,
data,
function(responseText){
jQuery('.reply-topic-form-holder').html(responseText);
jQuery('.alert-success').each(function(){
jQuery('#replytopic-form textarea').each(function(){
jQuery(this).val('');
});
});
jQuery('.topic-loading').hide();
init_reply_topic_js();
}
);
});
}
</script>
答案 0 :(得分:1)
CK实际上并没有使用textarea字段,它只是一个占位符&#39;可以这么说。因此,您必须确保将CK中的数据添加到textarea中,否则当您通过AJAX发布时,您将不会获得该字段的数据。正常发布时,由于autoUpdateElement,这不是问题。
在var data = jQuery(this).serializeArray();
添加CKEDITOR.instances.comment.updateElement();
之前。这将确保将CK编辑器的内部标记添加到textarea中,以便在序列化数组之前填充该字段。
方法here的文档。
jQuery('#replytopic-form').submit(function (e) {
CKEDITOR.instances.comment.updateElement();
var data = jQuery(this).serializeArray();
jQuery('.topic-loading').show();
e.preventDefault();
var loadUrl = jQuery(this).attr('action');
jQuery.post(
loadUrl,
data,
function (responseText) {
jQuery('.reply-topic-form-holder').html(responseText);
jQuery('.alert-success').each(function () {
jQuery('#replytopic-form textarea').each(function () {
jQuery(this).val('');
});
});
jQuery('.topic-loading').hide();
init_reply_topic_js();
}
);
});