【问题标题】:jQuery check if form data are equal [duplicate]jQuery检查表单数据是否相等[重复]
【发布时间】:2012-04-20 04:23:51
【问题描述】:

可能重复:
Using jQuery to compare two arrays

我必须每隔 30 秒通过 ajax 将表单数据发送到服务器。现在我希望在客户端检查它,并且只有在表单有任何变化的情况下才会点击 ajax。我正在使用:

var lastData = "";
function saveFormInDB(){
    var $form = $("#fb_divBl0ck1").closest('form');
    var isSame = false;
    data = $form.serializeArray();
    if(lastData == ""){
        lastData = data;
    }else{
        if(lastData == data){
            isSame = true;
        }
        lastData = data;
    }
    if(!isSame){
        jqxhr = $.post("/SPSKMEForm/FormSaveServlet", data)
        .success(function() {
            if(jqxhr.responseText != ""){
                alert(jqxhr.responseText);
                alert($("#fixedFooter"));
                alert($("#fixedFooter").html());
                $("#fixedFooter").text(jqxhr.responseText).css("display", "");
                $("#fixedFooter").fadeOut("slow");
            }
        });
    }
}

但是isSame 总是会变成假的。

【问题讨论】:

    标签: jquery


    【解决方案1】:

    那是因为你的变量 lastData 被认为是一个字符串,而 data 是一个对象。因此,您的检查将始终失败,您将始终拥有isSame = false

    编辑:

    .serializeArray() 方法创建一个 JavaScript 对象数组, 准备好被编码为 JSON 字符串。

    【讨论】:

    • 我不这么认为...... m 将数据分配给 lastData.. 所以它也是一个对象 var 可以用于所有的东西(我猜)。
    • 只需检查您的代码 Varun,您将进行检查,如果是真的,您会说 isSame = true 并且无论检查的结果如何,您将始终将 lastData 分配给数据,但 isSame 会永远是假的。
    • +1:.serializeArray() 方法创建一个 JavaScript 对象数组,准备好编码为 JSON 字符串。 - api.jquery.com/serializeArray
    • 我知道有一些问题,但我怀疑lastData 被指定为string 的原因会是问题......虽然不确定
    • @Varun: stackoverflow.com/questions/1773069/… - 认为自己被喂了:)
    【解决方案2】:

    我会以不同的方式处理这个问题:

    在您的表单输入标签中添加一个包含已保存(原始)值的属性:

    <input type="text" name="name" value="" original="Brian">
    

    现在在你的 jQuery 中,检查值是否匹配:

    if($('[name="name"]').attr('value') == $('[name="name"]').attr('original')) {
      //perform .post here
      //post success sets attr original to posted value
     }
    

    每次提交数据时,请务必更新“原始”属性。

    【讨论】:

    • 会提高效率吗?简单地在全局 data 变量上放置一个循环并检查它的值会更好吗
    猜你喜欢
    • 2013-10-07
    • 1970-01-01
    • 2012-03-26
    • 2019-08-24
    • 2016-07-08
    • 1970-01-01
    • 2016-09-13
    • 2016-08-16
    • 1970-01-01
    相关资源
    最近更新 更多