"脏的“;函数,需要脚本将触发延迟到加载数据之后

"dirty" function in Form, need script to delay firing until after data is loaded

本文关键字:延迟 迟到 加载 之后 数据 脏的 quot 函数 脚本      更新时间:2023-11-06

我通过搜索获得了这个脚本,用于在退出页面之前检查是否有任何表单字段被更改:

$(':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进行数据库访问/表单加载。

感谢

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

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;
   } 
});  

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

如果您是通过Ajax进行填充的,那么应该按照otehrs的建议在回调中运行函数。但是,如果没有,您可以将代码放入一个处理程序中,等待页面准备就绪。

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