Javascript 我如何知道用户选择不离开页面以防止丢失表单更改?

Javascript 我如何知道用户选择不离开页面以防止丢失表单更改?,javascript,jquery,asp.net-mvc-4,Javascript,Jquery,Asp.net Mvc 4,这里和网站上都有很多例子,展示了如何警告用户,如果用户离开当前页面,他们所做的更改将丢失。我已经在我自己的项目上实现了一个简单的解决方案。但这还不足以解决所有问题 在我的例子中,用户很可能会通过选择三个下拉列表中的一个来尝试离开页面。当他们收到警告并选择不离开页面时,所选下拉列表仍然显示他们的新选择,而不是将他们带到此页面的选择。因此,他们可能会对页面内容的来源产生误解。这是不能接受的。因此,当他们选择留在页面上时,我需要重置下拉列表 当然,浏览器开发人员没有授予我们访问onbeforeunlo

这里和网站上都有很多例子,展示了如何警告用户,如果用户离开当前页面,他们所做的更改将丢失。我已经在我自己的项目上实现了一个简单的解决方案。但这还不足以解决所有问题

在我的例子中,用户很可能会通过选择三个下拉列表中的一个来尝试离开页面。当他们收到警告并选择不离开页面时,所选下拉列表仍然显示他们的新选择,而不是将他们带到此页面的选择。因此,他们可能会对页面内容的来源产生误解。这是不能接受的。因此,当他们选择留在页面上时,我需要重置下拉列表

当然,浏览器开发人员没有授予我们访问onbeforeunload事件结果的权限,因此我们无法直接知道用户是否选择留下来。他们显然是笨蛋,应该因为这一疏忽而被打屁股;-)

我看到过关于设置计时器和检查onbeforeunload窗口离开后我们是否仍在这里的讨论,但未能使其正常工作。有没有人能真正解决这方面的问题

更新


如果这听起来很讽刺,请原谅,但我想你没有读过我的问题。我完全熟悉它是如何工作的,但它并不“为我处理”。问题不仅仅是阻止用户错误导航。问题是,所选下拉列表仍然显示用户的新选择,这是页面标识系统的一部分,如果您愿意,它会告诉用户显示数据的来源

页面将加载三个选项中的第一个选项。用户必须能够依赖与显示选项相关的显示数据。但是,当用户对数据进行更改,然后在其中一个选项中选择另一个选项(该选项在更改时从服务器调用新数据),然后取消导航时,新选择的选项仍然显示,而数据没有更改,错误地声明显示的数据来自这三个选项,但事实并非如此。这是不能接受的。这更清楚吗

当用户取消导航时,我需要将选择重置为上一个选项。当然,这都是由客户的需求驱动的,而不是我的需求,那么我们该怎么做呢?
非常感谢您的帮助,但我希望您现在能更好地看到问题。

您不需要访问onbeforeunload的结果。您所要做的就是在代码中实现它。如果用户决定留在页面上,所有信息都应保持可用

Javascript:

window.onbeforeunload = function(){
  return 'Are you sure you want to leave?';
};
JQuery:

$(window).bind('beforeunload', function(){
  return 'Are you sure you want to leave?';
});
这会给你一个提示,询问你是否想离开。用户可以选择是否留下来,这一切都由该函数处理

编辑:事实上,我确实误读了这个问题。如果我理解正确,如果用户在询问是否要离开页面的对话框中单击“取消”,您希望重置下拉列表的值。我已经研究了几个小时,试图找到一个合适的答案,但到目前为止,我还没有成功。事实是Window.onbeforeunload()不能包含一个自定义函数,该函数将访问returnValue并相应地操作下拉列表。onbeforeunload()仅用于向用户显示字符串和两个按钮。onbeforeunload中没有任何地方可以创建或访问自定义函数。
另外,据我所知,没有其他方法(不推荐使用的“onunload”函数除外)来捕获页面关闭事件并为用户提供留下或离开的选择。这肯定是下一版本Javascript中需要解决的问题。

,如果用户不离开,脚本继续执行,不需要任何魔法。@leemid,您不需要访问onbeforeunload的结果。它为你工作you@adeneo,如果你发布你的答案,我将删除我的答案,因为你首先提供的答案对我来说并不重要!你能给我们看一下
onbeforeunload
事件处理程序吗?如果这听起来很可笑,请原谅,但我想你没有读过我的问题。我完全熟悉它是如何工作的,但它并不“为我处理”。问题不仅仅是阻止用户错误导航。问题是,所选下拉列表仍然显示用户的新选择,这是页面标识系统的一部分,如果您愿意,它会告诉用户显示数据的来源。页面加载了三个选项中的第一个选项。嗯,你是对的——我确实误读了你的问题。那么,如果用户在页面导航弹出窗口中选择“取消”,您要做的是重置下拉列表?