我有以下Jquery函数,当用户有未保存的更改(类似于SO的做法)并尝试离开当前屏幕时,通知用户提示。
<!-- in my aspx page -->
<script type="text/javascript" language="javascript">
window.onbeforeunload = function()
{
if (HasPendingUpdates())
{
return "Changes you have made will not be saved.";
}
}
</script>
这可以按预期工作,并在用户尝试单击href以浏览或使用后退按钮等时显示消息框。我遇到的问题是我的一个链接是asp:LinkButton
,因为它需要在离开页面之前触发一些服务器端代码。当用户点击此LinkButton
时,他们会收到提示两次。
方案:
LinkButton
提示消失,用户仍在屏幕上。 GOOD。
用户点击LinkButton
那我为什么得到第二个提示??? OnBeforeUnload如何触发两次?
答案 0 :(得分:2)
我有类似的问题,但是,我根本不想为LinkButtons启动onbeforeunload,因此我对.aspx页面上的每个LinkButton使用了以下内容:
OnClientClick="eval(this.href);return false"
LinkButtons的功能并没有削弱,因为他们所做的只是提供一个带有CommandArgument的Command,以便代码隐藏处理......
答案 1 :(得分:0)
使用jQuery添加处理程序将它们堆叠起来。如果你为你的hrefs分配一个带有jQuery函数的处理程序,然后再为你的链接按钮分配它,那么就会有两个处理程序。
检查绑定onunload处理程序的频率,并确保您要解除之前处理程序的绑定或仅执行一次。
答案 2 :(得分:0)
以下是解决此问题的方法:
var checkChangesEnabled = true;
window.onbeforeunload = confirmExit;
function confirmExit() {
if (checkChangesEnabled) {
event.returnValue = "Changes you have made will not be saved.";
disableCheck();
}
}
function disableCheck() {
checkChangesEnabled = false;
setTimeout("enableCheck()", "100");
}
function enableCheck() {
checkChangesEnabled = true;
}