将旧值与Form的新值进行比较

时间:2011-06-25 19:04:15

标签: javascript jquery

我有一个包含多个字段的表单,其中一个字段是“counter”,它会不断更改。编辑表单时,我需要跟踪某些字段是否已更改,并将“计数器”字段设置为提交时修改字段的数量。例如,如果计数器的旧值为10并且修改了field1,field2和field3,则表单提交计数器应递增为13。

以下是我正在尝试为一个字段做的但是它无法正常工作。我还需要不仅检查一个字段,还要检查其他一些字段。任何帮助表示赞赏。谢谢!

$(document).ready(function(){
    var oldVal = getOldValue("field1");
    var oldCounter = parseInt(getOldValue("Counter"));
    var curCounter;

    $('field1').change(function(){
        var newVal= $(this).val();

            if(oldVal.val() == newVal.val()){
                curCounter = oldCounter +1;
                setField("Counter", parseInt(curCounter));
            }

    });

});

3 个答案:

答案 0 :(得分:0)

您的if声明不正确。它会在值发生变化时触发(.change()),但您通过if(oldVal.val() == newVal.val())检查值是否相同

另外,.val()是jQuery对象的一个​​方法,所以除非函数getOldValue()返回一个jQuery对象,否则你的if语句可能不会按照你期望的那样做它要做。

我要做的是将表单字段的oldValues存储在表单字段的data属性中,以便您可以在.change()事件中轻松访问它,例如:

$(document).ready(function(){

    var oldCounter = parseInt(getOldValue("Counter"), 10); // use the second argument '10' here or you might get strange results
    var curCounter = oldCounter;


    $('.field').each(function() {
        // store the old value
        $(this).data("oldValue", getOldValue($(this).attr("id")));
    })
    .change(function(){
        // compare values, increase counter if it is different than the original value
        if($(this).data("oldValue") != $(this).val()) {
           curCounter++;
           setField("Counter", curCounter);
        }
    });

});

未经测试的代码,但你得到了要点,希望这有帮助

答案 1 :(得分:0)

我注意到的3件事

*。你正在检查newVal的值两次,它应该是

var newVal = $(this).val(); if (oldVal == newVal).....

*。对于oldValue变量,你可以做var oldVal=$('#filed1_id').val();这将更简单,并且将获得所需的值而不是对象,这更容易处理。

*。你说你需要检查提交时的更改,但是你要检查更改,将其更改为意味着你需要更频繁地检查。

再次,知道getOldValue的作用会很好。 祝你好运

答案 2 :(得分:0)

我假设您想知道用户在提交表单时是否修改了任何字段。最简单的方法是使用.data()来跟踪哪些字段已从原始值更改。正如其他海报提到的那样,您的代码冗余地调用.val(),错误地使用==而不是!=,并且可能没有正确使用jQuery对象。

这个小提琴应该解决您的问题:http://jsfiddle.net/EYjxP/