基本概要......
我从数据库中提取“帖子”并显示如下:
<div class="blogtest">
<form action="process/updatepost.php" class="updatepost" method="post">
<input type="button" class='.$editenabled.' value="Edit">
<input type="submit" class="saveupdatebutton" value="Save">
<input type="hidden" class="postid" name="postid" value="'.$postID.'">
<div class="text">
<div class="buildtext">'.$text.'</div>
<div class="editor"><textarea name="ckeditor"id="ckeditor" class="ckeditor">'.$text.'</textarea></div>
</div>
</form>
</div>
单击编辑按钮后,将隐藏buildtext类并显示ckeditor。编辑和保存按钮也是如此。
单击“保存”时,将进行ajax调用,然后更新数据。这非常合适......但是如果该页面上只有1篇博文,那么它只能完美地运行。
以下是供参考的ajax:
$(document).ready(function(){
$(".updatepost").submit(function(){
var $targetForm = $(this);
$targetForm.find(".error").remove();
$targetForm.find(".success").remove();
// If there is anything wrong with
// validation we set the check to false
var check = true;
// Get the value of the blog update post
var $ckEditor = $targetForm.find('.ckeditor'),
blogpost = $ckEditor.val();
// Validation
if (blogpost == '') {
check = false;
$ckEditor.after('<div class="error">Text Is Required</div>');
}
// ... goes after Validation
if (check == true) {
$.ajax({
type: "POST",
url: "process/updatepost.php",
data: $targetForm.serialize(),
dataType: "json",
success: function(response){
if (response.databaseSuccess)
$targetForm.find(".error").remove();
else
$ckEditor.after('<div class="error">Something went wrong!</div>');
}
});
}
return false;
});
});
所以,如果页面上有2篇博文,我编辑第2篇(最后)帖子,点击保存帖子就会正确更新。
但是,如果我编辑任何其他内容,则需要两次提交才能发送数据。
我查看了firebug,它显示在第一次点击时,旧的值被发送,然后在第二次点击新的。
我哪里错了?
最终(一旦工作)该帖子将在ajax调用成功时刷新,但是现在显然至关重要的是用户只需要点击保存一次。
感谢您的帮助!需要更多代码并在此处发布。
克雷格:)
编辑:在使ckeditor成为普通文本区后,它可以正常工作。必须是ckeditor不更新,因为我知道它并不像文本区域那样工作。也许不得不使用另一个富有的编辑器......答案 0 :(得分:3)
我有类似的问题。只是为了分享我的经验,以防任何人在这里遇到同样的问题。第一次单击提交按钮时,CKEditor没有更新目标textarea,因为我在文本区域进行了数据验证,谢天谢地让我知道textarea在第一次提交时没有填充。为了解决这个问题,我添加了一些代码:
$('#accept-button').click(function (event) {
for (var i in CKEDITOR.instances) {
CKEDITOR.instances[i].updateElement();
}
}
答案 1 :(得分:1)
据integration guide我所知,CKEditor最有可能使用自己的onsubmit事件将数据实际发送回textarea。这意味着这两个事件可能会启动逆序,首先从代码中检索旧文本,然后再更新textarea。
您始终可以使用以下语法尝试检索CKEditor的内容:
var editor_data = CKEDITOR.instances.yourInstance.getData();
另外,您使用的是带有CKEditor的jQuery适配器吗?
编辑:问题似乎是在多个textareas上使用相同的ID,所有这些都被称为“ckeditor”。这会导致浏览器出现意外行为,因为ID必须始终是页面唯一的。