代码之家  ›  专栏  ›  技术社区  ›  clockwiseq

jquery用户界面对话框onbeforeunload

  •  64
  • clockwiseq  · 技术社区  · 15 年前

    我有个小问题。我正在尝试捕获窗口的OnUnload事件并询问确认问题,如果用户决定要保持正常,那么他们将丢失所有未保存的数据。问题是……

    我使用的是jquery用户界面对话框,当我将以下代码放到我的页面上时,对话框将打开,当我单击浏览器上的后退按钮时,它不会弹出msgbox。它只是刷新页面:

    <script type="text/javascript"> 
        $(window).bind('beforeunload', function() { 
                alert('you are an idiot!'); 
            } 
        );
    </script>
    

    我使用的解决方案是一个帖子 here . 同样,如果我没有打开jquery ui对话框,msgbox将显示良好。如果我这样做了,那么它不会显示msgbox,只会刷新页面。

    有什么想法吗?

    6 回复  |  直到 7 年前
        1
  •  111
  •   Jordan Ryan Moore    9 年前

    显示警报的正确方法是简单地返回一个字符串。不要叫 alert() 自己动手。

    <script type="text/javascript">
        $(window).on('beforeunload', function() {
            if (iWantTo) {
                return 'you are an idiot!';
            }
        }); 
    </script>
    

    参见: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload

        2
  •  43
  •   DarthJDG chetan borse    13 年前

    您还可以通过提交特定表单来例外离开页面:

    $(window).bind('beforeunload', function(){
        return "Do you really want to leave now?";
    });
    
    $("#form_id").submit(function(){
        $(window).unbind("beforeunload");
    });
    
        3
  •  14
  •   Ram    12 年前

    这对我有用

    $(window).bind('beforeunload', function() {
          return 'Do you really want to leave?' ;
    });
    
        4
  •  1
  •   Thomas    13 年前

    jquery api特别声明在卸载之前不要绑定到,而是直接绑定到窗口。在卸载之前,我遇到了一个相当糟糕的内存,部分原因是jquery绑定到了卸载之前。

        5
  •  1
  •   Lazerbeak12345    8 年前

    这对我很有用:

    window.addEventListener("beforeunload", function(event) {
      event.returnValue = "You may have unsaved Data";
    });
        6
  •  0
  •   Mohammad Atiour Islam    7 年前

    对于ASP.NET MVC,如果您希望通过提交特定表单来例外退出页面:

    设置表单ID:

    @using (Html.BeginForm("Create", "MgtJob", FormMethod.Post, new { id = "createjob" }))
    {
      // Your code
    }
    
    
    
    <script type="text/javascript">
    
      // Without submit form
       $(window).bind('beforeunload', function () {
            if ($('input').val() !== '') {
                return "It looks like you have input you haven't submitted."
            }
        });
    
        // this will call before submit; and it will unbind beforeunload
        $(function () {
            $("#createjob").submit(function (event) {
                $(window).unbind("beforeunload");
            });
        });
    
    </script>