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

时间:2014-04-15 17:58:31

标签: javascript jquery asp.net-mvc-4

这里有很多例子,网上显示如何警告用户如果离开当前页面,他们所做的更改将会丢失。我在自己的项目中实现了一个很好的简单解决方案。但这对于问题的所有实例都是不够的。

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

当然,浏览器开发人员还没有让我们访问onbeforeunload事件的结果,因此我们无法直接知道用户已选择留下。他们显然是玩具,应该为这种疏忽打屁股; - )

我已经看过有关设置计时器和在onbeforeunload窗口离开后检查我们是否还在这里的讨论,但是无法让它工作。有没有人对场景的这个方面有真正的解决方案?

更新

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

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

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

1 个答案:

答案 0 :(得分:0)

您无需访问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中修复的东西。