表单需要在发送更新数据之前提交两次

时间:2013-09-26 19:00:33

标签: javascript php jquery ajax blogs

基本概要......

我从数据库中提取“帖子”并显示如下:

<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不更新,因为我知道它并不像文本区域那样工作。也许不得不使用另一个富有的编辑器......

2 个答案:

答案 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必须始终是页面唯一的。