【问题标题】:Window.onbeforeunload and __dopostback not working together correctlyWindow.onbeforeunload 和 __dopostback 无法正常协同工作
【发布时间】:2014-07-24 14:57:48
【问题描述】:

首先,我是 Web 表单和 JavaScript 的新手,我用 Google 搜索了两天没有结果。我试图在用户退出页面之前询问他们是否要保存他们输入的数据。我有一个文本框,它告诉是否已经执行了任何应该触发 javascript if 语句的输入。如果用户使用页面中包含的控件离开页面,我的代码就可以工作。当他们单击右上角的 X 或选择文件/退出时,它不起作用。下面是我的代码。

     <script type="text/javascript" >
     var needToConfirm = "False";
     var hdnNeedToConfirm = ""
     window.onbeforeunload = confirmExit;
     function confirmExit() {
         __doPostBack('<%= Page.Master.FindControl("MainContent").FindControl("PADForm").ClientID %>', '');
         __doPostBack('<%= Page.Master.FindControl("MainContent").FindControl("HiddenPanel").ClientID %>', '');
         hdnNeedToConfirm = document.getElementById('<%= Page.Master.FindControl("MainContent").FindControl("HdnNeedToConfirm").ClientID %>');
         if (hdnNeedToConfirm != null)
             needToConfirm = hdnNeedToConfirm.value;
         else
             needToConfirm = "False";
         if (needToConfirm == "True")
             window.open("SaveOrLose.aspx");
     }
</script>

我在上面的代码中有两个 __dopostback 语句,但是在其余代码之后才真正发生回发。这意味着 if 语句失败,所以保存表单永远不会打开。

如果您能提供任何帮助,我将不胜感激!

【问题讨论】:

    标签: javascript asp.net onbeforeunload dopostback


    【解决方案1】:

    您不应从您的代码中调用__doPostBack()

    这是一个只能由 ASP.NET Web 窗体调用以调用服务器端事件/代码的函数。

    如果您检查 __doPostBack() 函数的实现,您会注意到它提交了一个 HTML 表单。

    因此,您的程序将永远不会到达第二次调用__doPostBack() 的地步。

    【讨论】:

    • 我把它们放进去是为了捕捉 X 和 File/Exit 事件。我以前使用代码隐藏来打开保存表单。如果使用 X 或 File/Exit,我的文本框不会激活其 ontextchanged 事件,因此正在尝试另一条路线。谢谢!!
    • 你能(用伪代码)解释一下关闭视图时你想要完成的事情吗?
    • 如果表单中发生了输入
    • 抱歉,按回车键...要打开的表格。如果输入没有发生,我希望浏览器退出。现在,如果用户在文本字段中并点击 X 或 File/Exit,则不会发生最终回发。
    猜你喜欢
    • 2012-11-02
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 2019-02-14
    相关资源
    最近更新 更多