Javascript 将旧值与表单的新值进行比较

Javascript 将旧值与表单的新值进行比较,javascript,jquery,Javascript,Jquery,我有一个表单,有几个字段,其中一个是“counter”,它会不断变化。编辑表单时,我需要跟踪某些字段是否更改,并将“计数器”字段设置为提交时修改的字段数。例如,如果计数器的旧值为10,并且修改了字段1、字段2和字段3,则表单提交计数器应增加到13 下面是我试图做的只是一个领域,但它不能正常工作。我不仅需要检查一个字段,还需要检查其他几个字段。感谢您的帮助。谢谢 $(document).ready(function(){ var oldVal = getOldValue("field1")

我有一个表单,有几个字段,其中一个是“counter”,它会不断变化。编辑表单时,我需要跟踪某些字段是否更改,并将“计数器”字段设置为提交时修改的字段数。例如,如果计数器的旧值为10,并且修改了字段1、字段2和字段3,则表单提交计数器应增加到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));
            }

    });

});

您的
if
语句不正确。当值发生更改(
.change()
)时,它会触发,但您可以通过
if(oldVal.val()==newVal.val())

另外,
.val()
是jQuery对象的一个方法,因此除非函数
getOldValue()
返回一个jQuery对象,否则您的
if
语句可能不会执行您期望它执行的操作

我要做的是将表单字段的旧值存储在表单字段的
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);
        }
    });

});
未经测试的代码,但您了解要点,希望这有助于我注意到的三件事

*。您要检查newVal的值两次,它应该是

var newVal=$(this.val();
如果(oldVal==newVal)。。。。。

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

*。您说您需要在提交时检查更改,但您正在检查更改,将其更改为,这意味着您将在需要时更频繁地检查

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

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

这把小提琴应该解决你的问题: