【问题标题】:Why is OnBeforeUnload firing twice with asp:LinkButton?为什么 OnBeforeUnload 使用 asp:LinkBut​​ton 触发两次?
【发布时间】:2010-02-10 18:46:57
【问题描述】:

当用户有未保存的更改(类似于 SO 的做法)并试图离开当前屏幕时,我有以下 Jquery 函数来通知用户。

<!-- 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 时,他们会收到两次提示。

场景:

  1. 用户点击LinkButton
  2. 出现提示,用户单击取消按钮。
  3. 提示消失,用户仍在屏幕上。很好。

  4. 用户点击LinkButton

  5. 出现提示并单击“确定”按钮。
  6. 提示消失,再次显示相同的提示。
  7. 用户再次单击“确定”。
  8. 提示消失,用户移至下一个屏幕,一切正常。

那么为什么我会收到第二个提示??? OnBeforeUnload 如何触发两次?

【问题讨论】:

    标签: asp.net jquery webforms onbeforeunload


    【解决方案1】:

    我遇到了类似的问题,但是,我根本不想为 LinkBut​​tons 触发 onbeforeunload,因此我对 .aspx 页面上的每个 LinkBut​​ton 都使用了以下内容:

    OnClientClick="eval(this.href);return false"
    

    LinkBut​​tons 的功能并没有被削弱,因为它们所做的只是提供一个带有 CommandArgument 的命令,以供代码隐藏处理......

    【讨论】:

      【解决方案2】:

      使用 jQuery 添加处理程序会将它们堆叠起来。如果你为你的 href 分配一个带有一些 jQuery 函数的处理程序,然后为你的链接按钮再次分配它,就会有两个处理程序。

      检查您绑定 onunload 处理程序的频率,并确保您要么取消绑定以前的处理程序,要么只绑定一次。

      【讨论】:

      • 我没有将处理程序专门分配给任何控件。 Jquery 函数在页面加载时执行并将该函数分配给 window.onbeforeunload。该页面永远不会加载超过一次,因此 Jquery 代码应该只绑定一次。所有其他链接、后退按钮等都不会导致双重提示。
      【解决方案3】:

      以下是解决此问题的方法:

          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;
          } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-15
        • 1970-01-01
        • 1970-01-01
        • 2016-06-02
        • 2011-01-20
        • 1970-01-01
        • 1970-01-01
        • 2017-01-08
        相关资源
        最近更新 更多