"脏的“;函数,需要脚本将触发延迟到加载数据之后
"dirty" function in Form, need script to delay firing until after data is loaded
我通过搜索获得了这个脚本,用于在退出页面之前检查是否有任何表单字段被更改:
$(':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/
相关文章:
- 可以简化嵌套的延迟Q Promises解析吗
- onclick函数需要双击,因为类分配延迟
- 更多延迟动画
- 对父作用域的指令更新延迟了一步
- 为JS函数添加延迟
- 带有延迟的循环每次应运行5次
- 关键帧之间的css3动画延迟
- 如何在有延迟的情况下对两个代码进行积分
- 如何为.css状态的更改添加延迟
- Angular.js延迟控制器初始化
- 在延迟时设置Whois脚本
- 如何在Javascript中延迟setInterval
- 如何在一个元素动画之后延迟
- 如何将一个方法延迟到另一个方法首先完成,javascript
- jQuery延迟了ajax调用的循环
- 如何减少在移动网络应用程序上播放声音的延迟
- 如何将GreaseMonkey中的XMLHttpRequest延迟到目标页面加载完成
- 实现延迟的jquery更改事件处理程序
- 延迟高亮显示文本区域中的文本
- 如何利用多链接延迟检查并显示ping结果,然后使用JavaScript选择最快的URL