javascript - “你确定要离开吗?” 即使没有对表单进行任何更改,消息仍会弹出
问题描述
大多数情况下,下面的代码可以确保它捕捉到对表单所做的任何更改,但仍然有一些情况下,一个人转到一个页面,没有对表单进行任何更改,消息仍然弹出并且我不确定为什么即使没有更改也会弹出消息。任何帮助将不胜感激。
PS-其中一位开发人员说,也许它会有所帮助“所以问题是表单在序列化和保存之前没有完成加载。我添加了延迟并解决了问题,但我们不能依赖它。 "
function formUnloadPrompt(formSelector) {
var formA = $(formSelector).serialize(), formB, formSubmit = false;
// Detect Form Submit
$(formSelector).submit( function(){
formSubmit = false;
});
$(':submit').click(function() {
formSubmit = true;
});
// Handle Form Unload
window.onbeforeunload = function(){
if (formSubmit) return;
formB = $(formSelector).serialize();
if (formA != formB) return "Your changes have not been saved.";
};
}
解决方案
.ready()
您可以使用 jQueries方法检查 DOM 是否已完全加载。如果您将代码包装在其中,则只有在加载所有元素后才会执行。
$( document ).ready(function() {
// your code
});
另一种解决方案是将onchange
事件添加到输入字段并设置一个标志,以便您知道用户是否输入了任何内容。
一般来说,处理 DOM 元素的 javascript 的每个ready
方面都应该只在触发一次后执行。