Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 防止页面卸载、失败。思想?_Javascript_Jquery - Fatal编程技术网

Javascript 防止页面卸载、失败。思想?

Javascript 防止页面卸载、失败。思想?,javascript,jquery,Javascript,Jquery,我试图模仿这个网站上的一个功能。但它似乎不起作用。我尝试用jquery1.4.4来实现这一点,在浏览了这里和我想到的其他表单上的尽可能多的示例之后 $(window).bind('beforeunload', function() { if(show_unsaved_warning == true) { //e.preventDefault(); var exitBeforeSave = confirm('You have unsaved chan

我试图模仿这个网站上的一个功能。但它似乎不起作用。我尝试用jquery1.4.4来实现这一点,在浏览了这里和我想到的其他表单上的尽可能多的示例之后

$(window).bind('beforeunload', function()
{
    if(show_unsaved_warning == true)
    {
        //e.preventDefault();
        var exitBeforeSave = confirm('You have unsaved changes');
        if(exitBeforeSave == false)
        {
            return false;
        }
    }
});
此时将显示确认对话框,但无论单击“确定”还是“取消”,页面仍会加载/重新加载。我需要像stack那样防止这种情况,因此如果表单上有更改,我可以提示用户保存更改,以防他们忘记,或者让他们离开。在这个等式中,我是否遗漏了什么,或者说这是不可能的

请注意,我意识到这是一个在stack和其他几十个论坛上被问了十几次的问题。如果我能根据我发现的东西把东西拼凑起来,否则我就不会问了。我带着一个明显的重复问题来到这里,因为我现在被卡住了


编辑我稍微修改了代码以使用确认对话框,但是,问题仍然存在,在firefox上,我实际上导致了一个ok/cancel对话框,单击ok/cancel后,firefox会创建另一个单独离开/停留的提示。我怎样才能避免这种行为呢?

为什么要在onbeforeunload中使用confirm?默认情况下它会这样做

您过时的jQuery版本

$(window).bind('beforeunload', function() {
    if(show_unsaved_warning == true) {
        return 'You have unsaved changes.';
    }
});
jquery1.7+

$(window).on('beforeunload', function() {
    if(show_unsaved_warning == true) {
        return 'You have unsaved changes.';
    }
});

不幸的是,在我的公司为我的全面重建开绿灯之前,我一直坚持使用jquery 1.4.4,我一直试图引入一个独立的新版本,并使用noconflict,该软件打破了原始作者的思路,将混乱的代码放在一起。。无论如何,你过时的方式说明我失败了,它的工作,但仍然继续加载下一页或重新加载,因为我尝试之前的想法,确认当你点击取消下一页不应加载。你是说它仍然加载?
if(show\u unsaved\u warning==true)
最好写成
if(show\u unsaved\u warning)
。类似地,
if(exitBeforeSave==false)
最好写成
if(!exitBeforeSave)
。我知道这是一个小问题,比较布尔变量和真/假总是让我恼火。此外,在同一个函数中,将camelcase与下划线混合使用是在非类型化语言中失去理智的最可靠方法。(它是在保存之前退出还是在保存之前退出???直到运行时您才知道)。