首页 > 解决方案 > “你确定要离开吗?” 即使没有对表单进行任何更改,消息仍会弹出

问题描述

大多数情况下,下面的代码可以确保它捕捉到对表单所做的任何更改,但仍然有一些情况下,一个人转到一个页面,没有对表单进行任何更改,消息仍然弹出并且我不确定为什么即使没有更改也会弹出消息。任何帮助将不胜感激。

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.";
  };
}

标签: javascriptjqueryalert

解决方案


.ready()您可以使用 jQueries方法检查 DOM 是否已完全加载。如果您将代码包装在其中,则只有在加载所有元素后才会执行。

$( document ).ready(function() {
  // your code
});

另一种解决方案是将onchange事件添加到输入字段并设置一个标志,以便您知道用户是否输入了任何内容。

一般来说,处理 DOM 元素的 javascript 的每个ready方面都应该只在触发一次后执行。


推荐阅读