Form中的“脏”函数,需要脚本才能延迟触发,直到数据加载完毕

时间:2013-11-27 18:51:53

标签: javascript jquery

我通过搜索获取​​此脚本,用于检查在退出页面之前是否已更改任何表单字段:

$(':input').each(function() { 
    $(this).data('initialValue', $(this).val()); 
}); 
window.onbeforeunload = function(){ 
    var msg = 'You haven\'t saved your changes.'; 
    var isDirty = false;  
    $(':input').each(function () { 
       if($(this).data('initialValue') != $(this).val()){ 
          isDirty = true; 
       } 
    });  
if(isDirty == true){ 
    return msg; 
} 
}; 

从空表单开始时这很好用,但我遇到的问题是还有一个选项来填充从数据库中读取现有数据的表单,并且第一段代码在表单之前触发数据被加载,因此“onbeforeunload”函数始终认为表单是“脏”

理想情况下,我想暂停运行第一段代码,直到加载所有表单数据。我正在使用ASP / VBScript进行数据库访问/表单加载。

由于

2 个答案:

答案 0 :(得分:0)

将设置原始值的代码放入要在加载数据时调用的函数中:

function setOriginalValues() {
    $(':input').each(function() { 
        $(this).data('initialValue', $(this).val()); 
    });
}

附注:您可以通过返回false来中断.each()循环。这应该在找到“脏”值后完成:

$(':input').each(function () { 
   if($(this).data('initialValue') != $(this).val()){ 
      isDirty = true; 
      return false;
   } 
});  

答案 1 :(得分:0)

听起来您的表单数据尚未加载。即使它是作为页面加载的一部分来自服务器的,它也可能在浏览器解析页面的这一部分之后才可用,这可能是在您的代码之后。

如果你正在填充Ajax,你应该像otehrs建议的那样在回调函数中运行你的函数。但是,如果不是,您可以将代码放在一个等待页面就绪的处理程序中。

http://api.jquery.com/ready/