jQuery UI对话框OnBeforeUnload

clo*_*seq 64 jquery onbeforeunload jquery-ui-dialog

我有一个小问题.我试图抓住窗口的OnUnLoad事件并询问确认问题,如果用户决定他们想要保持那么好,如果他们想离开页面,那么他们将丢失所有未保存的数据.这是问题......

我正在使用jQuery UI对话框,当我在页面上放置以下代码时,我打开了Dialog,当我单击浏览器上的后退按钮时,它永远不会弹出msgbox.它只刷新页面:

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

我正在使用的解决方案是这里的帖子.再次,如果我没有打开jQuery UI对话框,msgbox将显示正常.如果我这样做,那么它不会显示msgbox并只刷新页面.

有任何想法吗?

Jor*_*ore 111

显示警报的正确方法是简单地返回一个字符串.不要alert()自己调用方法.

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

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

  • 出于安全原因,浏览器不允许您自定义按钮或对话框的结果.关于jQuery对话框如何影响卸载事件,发布其余代码会很有帮助. (7认同)
  • 如果他们单击取消,他们将保留在页面上.如果他们单击"确定",则会离开页面. (4认同)
  • 值得注意的是,FireFascist 3.5+不再显示*任何*用户提供的文本.因此,如果您的网站返回"离开此页面将停止您正在收听的歌曲",则用户会看到"此网站正在尝试告诉您我们已将其抑制的内容.可能您的数据未保存?". (2认同)

Tom*_*iva 43

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

$(window).bind('beforeunload', function(){
    return "Do you really want to leave now?";
});

$("#form_id").submit(function(){
    $(window).unbind("beforeunload");
});
Run Code Online (Sandbox Code Playgroud)


小智 14

这对我有用

$(window).bind('beforeunload', function() {
      return 'Do you really want to leave?' ;
});
Run Code Online (Sandbox Code Playgroud)