Javascript 如何检查页面中的内容是否已更改?
如果我在页面中进行任何更改,然后试图导航而不保存,我希望收到一条错误消息,询问是否要保存更改。Javascript 如何检查页面中的内容是否已更改?,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,如果我在页面中进行任何更改,然后试图导航而不保存,我希望收到一条错误消息,询问是否要保存更改。onbeforeuload事件是您需要的。 绑定一个函数,该函数返回一个字符串,当用户试图从页面导航(按后退、前进、单击链接、关闭选项卡或窗口本身)时,该字符串将显示(仅适用于Chrome浏览器,其他浏览器将显示默认消息) 将向用户显示一个类似确认的对话框,如果用户选择继续,将执行其请求的操作。如果他选择留在页面上,什么都不会发生 $('input').change(function(){ wi
onbeforeuload
事件是您需要的。
绑定一个函数,该函数返回一个字符串
,当用户试图从页面导航(按后退、前进、单击链接、关闭选项卡或窗口本身)时,该字符串将显示(仅适用于Chrome浏览器,其他浏览器将显示默认消息)
将向用户显示一个类似确认的对话框,如果用户选择继续,将执行其请求的操作。如果他选择留在页面上,什么都不会发生
$('input').change(function(){
window.onbeforeunload = function(){
//Return the message that should be displayed in Chrome.
// Other browsers will show default message.
return "You have unsaved changes on this page";
};
});
保存更改时,只需设置
window.onbeforeunload=null
即可在用户尝试导航离开页面时删除消息。onbeforeunload
事件就是您需要的。
绑定一个函数,该函数返回一个字符串
,当用户试图从页面导航(按后退、前进、单击链接、关闭选项卡或窗口本身)时,该字符串将显示(仅适用于Chrome浏览器,其他浏览器将显示默认消息)
将向用户显示一个类似确认的对话框,如果用户选择继续,将执行其请求的操作。如果他选择留在页面上,什么都不会发生
$('input').change(function(){
window.onbeforeunload = function(){
//Return the message that should be displayed in Chrome.
// Other browsers will show default message.
return "You have unsaved changes on this page";
};
});
当保存更改时,简单设置<代码>窗口.OnEnnFunLoad=null >代码>当用户试图从页面中导航时删除消息。
有一些要考虑的事情。
您使用哪些元素进行输入。这将影响elementSelector(在下面的代码中使用) 如果您使用诸如jeditable之类的插件,那么您需要了解的不仅仅是用于输入的元素。您还需要知道用于显示值的元素 如果您绑定到更改,如sudhirs Response中所述,我建议您使用live来执行此操作,而不是以自动支持就地编辑的方式绑定 在更改事件上设置标志的标志解决方案不包括用户将值更改回原始值的情况 下面代码的思想是迭代所有要监视和存储原始值的元素。卸载前,比较数值,如果发现变化,则应发出警告$(function(){
function getVal(){
var val,node = $(this),nodeType = node.attr('type');
if(this.nodeName.toLowerCase() == input){
if(nodeType === "checkbox" || nodeType === "radio"){
val = node.attr('checked');
} else{
val = node.val();
}
} else{
val = node.text();
}
return val;
}
$(elementSelector).each(function)({
$(this).data('original',getVal.Call(this));
});
window.onbeforeunload = function(){
var hasChanges;
$(elementSelector).each(function(){
var org = $(this).data('original'),val = getVal.call(this);
hasChanges = hasChanges || (org !== val)
});
if(hasChanges){
return "Are you sure you wish to leave this page. Changes will be lost");
}
};
});
如果保存后用户停留在页面上(即,数据使用Ajax发送到服务器),则需要更新存储值,以便后续更改正确地再次删除消息,但如果用户在保存
不改变任何内容,则不会有消息被删除。 您使用哪些元素进行输入。这将影响elementSelector(在下面的代码中使用) 如果您使用诸如jeditable之类的插件,那么您需要了解的不仅仅是用于输入的元素。您还需要知道用于显示值的元素 如果您绑定到更改,如sudhirs Response中所述,我建议您使用live来执行此操作,而不是以自动支持就地编辑的方式绑定 在更改事件上设置标志的标志解决方案不包括用户将值更改回原始值的情况 下面代码的思想是迭代所有要监视和存储原始值的元素。卸载前,比较数值,如果发现变化,则应发出警告$(function(){
function getVal(){
var val,node = $(this),nodeType = node.attr('type');
if(this.nodeName.toLowerCase() == input){
if(nodeType === "checkbox" || nodeType === "radio"){
val = node.attr('checked');
} else{
val = node.val();
}
} else{
val = node.text();
}
return val;
}
$(elementSelector).each(function)({
$(this).data('original',getVal.Call(this));
});
window.onbeforeunload = function(){
var hasChanges;
$(elementSelector).each(function(){
var org = $(this).data('original'),val = getVal.call(this);
hasChanges = hasChanges || (org !== val)
});
if(hasChanges){
return "Are you sure you wish to leave this page. Changes will be lost");
}
};
});
如果用户在保存后仍停留在页面上(即,使用ajax将数据发布到服务器),则需要更新存储值,以便后续更改可以正确地再次欺骗消息,但如果用户在保存后未更改任何内容,则不会欺骗任何消息,这可能会有所帮助。选中此项:@rutwick它可能比什么都没有好,但与其像这里建议的那样在每个表单控件上放置一个单击侦听器,不如在卸载侦听器之前安装一个,测试表单控件的当前值与默认值,并在表单提交时删除侦听器,以便在不必要时不调用它。这可能会有所帮助。选中此项:@rutwick它可能比什么都没有好,但与其像这里建议的那样在每个表单控件上放置一个单击侦听器,不如在卸载侦听器之前设置一个,并测试表单控件的当前值与它们的默认值,并在表单提交时删除侦听器,以便在不必要时不调用它。