我有一个包含多个字段的表单,其中一个字段是“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 :(得分: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/