2011-06-25 67 views
1

我有一个包含多个字段的表单,其中一个是“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)); 
      } 

    }); 

}); 
+0

什么是'getOldValue'? –

回答

0

您的if声明不正确。它激发当值发生了变化(.change()),但你正在检查,如果值是一样的,通过if(oldVal.val() == newVal.val())

而且,.val()是jQuery对象的一个​​方法,所以除非getOldValue()返回一个jQuery对象的功能,你if声明可能不会做你期望它做的事情。

我做的是表单字段的oldValues存储formfield的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); 
     } 
    }); 

}); 

未经测试的代码,但你得到的主意,希望这可以帮助

0

我注意到的3件事

*。你检查的newval的值的两倍,它应该像

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

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

*。你说你需要检查提交的变化,但你正在检查变化,改变它,这意味着当你需要时你会更频繁地检查。

再次,它将很高兴知道什么是getOldValue。 祝你好运

0

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

这拨弄应该解决您的问题:http://jsfiddle.net/EYjxP/