【问题标题】:confirm alert coming twice called when onbeforeload eventonbeforeload 事件时确认警报来了两次
【发布时间】:2011-05-25 04:56:23
【问题描述】:

我在 beforeload 事件上有一个确认框 - 代码如下:

window.onbeforeunload = function(){
            //alert('leaving ... ' + is_edited );

            if (is_edited == true) {
                return confirm('Are you sure you want to navigate away from this page? \n\n Press OK to continue, or Cancel to stay on the current page.');
            }

        };

问题在于 - 确认警报显示两次。我已经在 stackoverflow 上进行了搜索,并收到了很多关于这个问题的问题。但我的有点不同。显示两次的确认警报不同。对于 FF,消息是相同的,但对于第二个确认框中的 Crome,消息是 false

提前致谢。

【问题讨论】:

    标签: jquery onbeforeunload confirm


    【解决方案1】:

    “onbeforeunload”处理程序应该返回一个字符串。字符串是否显示给用户取决于浏览器。

    您的函数返回“confirm()”调用的结果,一个布尔值。 Firefox 4 确实显示从“beforeunload”处理程序返回的字符串,而其他浏览器仍然这样做。因此,您的函数会设置一个“确认”框,获取结果并返回它。然后浏览器会发出“beforeunload”确认,在某些浏览器的情况下,它会包含从您的处理程序返回的字符串化值(“true”或“false”)。

    Here 是事件及其处理程序的 Mozilla 文档。

    【讨论】:

    • The browser then puts up the "beforeunload" confirmation 是什么意思?我应该怎么做才能只显示一个确认框?
    • 您应该在“beforeunload”处理程序中执行“confirm()”。 “beforeunload”处理程序的工作方式非常奇怪。它所能做的就是返回一个字符串。浏览器可能向用户显示该字符串,也可能不显示 - 它不在您的控制范围内(出于安全/反垃圾邮件的原因)。
    【解决方案2】:

    你最好在这里使用 jQuery 来实现跨浏览器功能。

    jQuery UI Dialog OnBeforeUnload

    【讨论】:

    • 好的,它对我有用。现在我只收到一个确认框。但问题是@Pointy 所说的。 FF 和其他浏览器针对不同的浏览器返回不同的字符串。您能提出解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2021-05-21
    相关资源
    最近更新 更多