【问题标题】:alternative jquery library to triger beforeunload/unload event替代 jquery 库来触发 beforeunload/unload 事件
【发布时间】:2014-05-03 13:54:01
【问题描述】:

编辑:由于我的问题似乎不清楚 - 我只想在用户通过关闭浏览器/键入新链接/单击现有链接离开页面时添加 confirm() 消息

在卸载/卸载事件之前,我已经阅读了很多相关主题,但实际上没有一个可以帮助我,可能是我做错了。

我通过单击所有链接使脚本正常工作,但是在我的情况下,'beforeunload' 事件不起作用

普通脚本

$('a').on('mousedown', function(){
    var message = 'You are about to leave the page. Continue?'
    var result = confirm(message)
    if (result) {
        // some stuff
    } else {
        // some other stuff
    }
})

尝试使用 beforeunload

$(window).on('beforeunload', function(){
    var message = 'You are about to leave the page. Continue?'
    var result = confirm(message)
    if (result) {
        // some stuff
    } else {
        // some other stuff
    }
})

什么都没有发生。我也尝试过卸载事件,但仍然没有运气。

【问题讨论】:

  • 编辑后,您只能从 onbeforeunload 事件返回一个字符串。这将提示一个确认框。请注意,FF 不允许自定义消息 AFAIK。无论如何,您可以使用此事件解决许多其他问题,您应该尽可能避免它
  • 是否有其他库可以实现关闭浏览器等时的确认对话框?
  • @skzd 这不是 jQuery 功能,而是 javascript 功能。没有 javascript 库允许您使用 beforeunload 事件调用 confirm()
  • 事件的行为取决于浏览器的实现,javascript 无能为力。如果任何库可以以任何方式对其进行修改,那么它已经被大量滥用,然后应该尽快修复......
  • 所以我至少可以监听某些事件,例如单击或关闭窗口,然后使用确认消息调用我的函数吗?

标签: javascript jquery


【解决方案1】:

beforeunload 事件有点奇怪。大多数浏览器不允许您从处理程序触发确认对话,因为这将允许站点不断弹出确认对话,而不是离开页面。相反,您应该返回要显示的消息,例如:

$(window).on('beforeunload', function(e) {
    var msg = 'You are about to leave the page.  Continue?';
    (e || window.event).returnValue = msg;  //IE + Gecko
    return msg;  //Webkit
});

如果您想在结果对话退出后运行其他 javascript,请添加一个 onunload 侦听器。

编辑

正如 cmets 中所指出的,这些事件因浏览器而异。例如,最新版本的 gecko (firefox) 不允许自定义消息。

【讨论】:

  • 你确定这会起作用吗?另请注意,最后有语法错误。这是代码 sn-p 起源的文档页面(使用window.addEventListener):developer.mozilla.org/en-US/docs/Web/Reference/Events/…
  • onunloadonbeforeunload 在浏览器中的行为可能不一致,例如,FF 不允许自定义消息(最新版本???)并且无法触发 onunload 事件(歌剧?),等等...现在重读OP的问题,我认为这回答了问题+1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多