这似乎是一个常见问题,但搜索未返回任何内容。
我有以下代码在页面卸载之前执行。问题是如果卸载是回发我不想向用户发出警告但我无法弄清楚如何区分回发和例如,用户导航到另一个页面。
// This is executed before the page actually unloads
$(window).bind("beforeunload", function () {
if (prompt) {
//prompt
return true;
}
else {
//reset our prompt variable
prompt = true;
}
})
在后面的代码中运行脚本,即如果 Page.IsPostBack 然后设置提示不是一个选项。
有什么想法吗?
编辑:
这是我最终得到的解决方案:
function DoNotPrompt() {
prompt = false;
}
然后我将其添加到所有控件中,用户可以在其中执行某些操作以产生回发。
OnClientClick="DoNotPrompt()
然后检查这个标志,如果用户真的离开页面,即不是回发,则只在“beforeunload”中返回一个字符串。
我还必须使用这段代码: var magicInput = document.getElementById('__EVENTTARGET');
if (magicInput && magicInput.value) {
// the page is being posted back by an ASP control
prompt = false;
}
原因是我有一个自定义用户控件,它是一个列表框,我无法添加上述方法。所以用它来捕获该事件并将标志设置为 false。
不是最优雅的解决方案。
谢谢, 迈克尔
最佳答案
您可以捕获提交并将 onbeforeunload 重置为:
jQuery(function($) {
var form = $('form'), oldSubmit = form[0].onsubmit;
form[0].onsubmit = null;
$('form').submit(function() {
// reset the onbeforeunload
window.onbeforeunload = null;
// run what actually was on
if(oldSubmit)
oldSubmit.call(this);
});
});
这是我页面上经过测试的代码:)
关于javascript - 如何判断 ASP 中的页面卸载是否是 PostBack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10414603/