ASP.NET linkbutton 引发 onBeforeUnload 事件两次

标签 asp.net javascript

我已经发布了这个 here , 但认为它本身可能值得一个问题。

我想做的是显示一个对话框,询问用户如果有未保存的更改,他/她是否想离开页面。一切正常。但问题描述如下:

有没有人遇到过 Internet Explorer 两次触发 onbeforeunload 事件的问题?在谷歌搜索时,我发现它与以下事实有关:对于(除其他外)ASP.NET 链接按钮,HTML 代码是 <a href="javascript: __doPostBack...。 .

显然,当 IE 遇到一个没有 href="#" 的链接时,它会触发 onbeforeunload 事件。然后,当您确认我们正在显示的 javascript 对话框时,该页面将进行“真正的”卸载以导航到另一个页面,并第二次引发 onbeforeunload 事件。

互联网上提供的一种解决方案是设置一个 bool 变量并在显示对话框之前对其进行检查。所以第二次,它不会被显示。一切都很好,但是当用户取消时,变量仍将被设置。因此下次用户想要离开页面时,对话框将不再显示。

希望这有点清楚,我希望有人找到解决这个问题的方法?

最佳答案

对 annakata 的 react :是的,但您希望浏览器使用对话框的结果。因此,您可能认为使用“return bFlag”可以解决问题(或 event.returnValue = bFlag),但这会为您提供第二个对话框。 感谢this page,我找到了解决方法.其实很简单:

var onBeforeUnloadFired = false;

在这里使用这个全局变量:

if (!onBeforeUnloadFired) {
    onBeforeUnloadFired = true;
    event.returnValue = "You'll lose changes!";
}
window.setTimeout("ResetOnBeforeUnloadFired()", 1000);

然后实现那个函数:

function ResetOnBeforeUnloadFired() {
    onBeforeUnloadFired = false;
}

因此,实际上,使用标志,但如果用户单击取消,则重置它。不完全是我想要的,但还没有找到更好的东西。

关于ASP.NET linkbutton 引发 onBeforeUnload 事件两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/317423/

相关文章:

JavaScript 说 10 小于 9

javascript - 将 Json 对象转换为单个数组

javascript - 如何使用 ng-repeat 对二维 json 对象应用过滤器?

c# - 如何在不购买域的情况下托管我的 ASP.Net 管理面板?

c# - ASP .NET - 设置 ListView InsertItemTemplate 的默认值

asp.net - 在 Azure 上托管时无法利用 SIMpleMembership 功能

Javascript排序函数将元素放在数组的中间

asp.net - 如何保存运行配置 - Visual Studio Mac

c# - MVC 3 任务等待

javascript - 返回具有属性值的对象