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

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

最佳答案

我遇到了类似的问题。只是为了分享我的经验,以防有人在这里遇到同样的问题。 CKEditor 没有在第一次单击提交按钮时更新目标文本区域,并且由于我对文本区域进行了数据验证,谢天谢地让我意识到第一次提交时没有填充文本区域。为了克服这个问题,我添加了这段代码:

$('#accept-button').click(function (event) {
    for (var i in CKEDITOR.instances) {
        CKEDITOR.instances[i].updateElement();
    }
}

关于javascript - 在发送更新数据之前需要提交两次表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19036475/

相关文章:

javascript - V8 WasmModuleBuilder 从函数返回多个值

javascript - Http Get 请求中止先前的 Get 请求

php - 提高mysql数据库查询速度

php - TCPDF,带有 OpenType 字体的 "Could not include font definition file"

Jquery 动画属性?

javascript - 是否可以使用 chrome 扩展与非事件选项卡中的内容元素进行交互?

javascript - 根据 Javascript 中的选择填充下拉列表

javascript - 如何将数组中的每个元素与多个条件进行比较?

php - Mysql - 变量等于或小于字符串

javascript - 将值从页面传递到 Bootstrap 模式和操作结果