javascript - 如何判断 ASP 中的页面卸载是否是 PostBack

标签 javascript jquery asp.net

这似乎是一个常见问题,但搜索未返回任何内容。

我有以下代码在页面卸载之前执行。问题是如果卸载是回发我不想向用户发出警告但我无法弄清楚如何区分回发和例如,用户导航到另一个页面。

// 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/

相关文章:

jquery - Rails 4 不使用 Remotipart 远程提交表单

c# - 将 HTML Div 代码转换为控件

javascript - 使用 CSS 更改 div 的位置

javascript - AngularJS ng-重复某些过滤表达式

jquery - 移动一个 div 到顶部 : absolute position to specific div

javascript - 如果 ID 缺失,则使用 jquery 填充另一个隐藏字段中的行

javascript - 如何使用 Rxjs 5 限制服务器请求?

javascript - 在 React 中,为什么将数字形式的状态添加到数字形式的 prop 中会产生字符串?

asp.net - 使用代码动态加载 SSL

c# - 以编程方式创建 IIS7 虚拟目录