6

是否可以在浏览器中为 onbeforeunload 事件创建自定义确认框?我试过了,但后来我得到了 2 个确认框(一个来自我,只不过是返回确认......然后是来自浏览器的标准一个)。

目前我的代码如下所示:

var inputChanged = false;

$(window).load(function() {
    window.onbeforeunload = navigateAway;
    $(':input').bind('change', function() { inputChanged = true; });
});

function navigateAway(){
    if(inputChanged){
        return 'Are you sure you want to navigate away?';
    }
}

我为此使用 jQuery。

4

3 回答 3

11
window.onbeforeunload = function (e) {
  var message = "Your confirmation message goes here.",
  e = e || window.event;
  // For IE and Firefox
  if (e) {
    e.returnValue = message;
  }

  // For Safari
  return message;
};

请注意:大多数浏览器将此消息放在其他一些文本之后。您无法完全控制确认对话框的内容。

于 2009-08-26T19:37:32.770 回答
3

不,您无法避免浏览器中的标准版本。您所能做的就是在其中注入一些自定义文本;如果您使用以下事件处理程序(注册原型库方式):

Event.observe(window, "beforeunload", function(event) {
    if (showMyBeforeUnloadConfirmation)
        event.returnValue = "foo bar baz";
});

(并且showMyBeforeUnloadConfirmation是真的)您将获得浏览器的标准确认,其中包含以下文本:

您确定要离开此页面吗?

富吧巴兹

按 OK 继续,或按 Cancel 停留在当前页面。

[确定] [取消]

于 2009-08-26T16:22:27.343 回答
0

我遇到了同样的问题,我能够获得带有我的消息的自己的对话框,但我面临的问题是:

  1. 它在所有导航上都给出了消息,我只希望它用于近距离点击。
  2. 如果用户选择“取消”,使用我自己的确认消息,它仍然显示浏览器的默认对话框。

以下是我在母版页上找到的解决方案代码。

function closeMe(evt) {
    if (typeof evt == 'undefined') {
        evt = window.event;
    }
    if (evt && evt.clientX >= (window.event.screenX - 150) && evt.clientY >= -150 && evt.clientY <= 0) {
        return "Do you want to log out of your current session?";
    }
}

window.onbeforeunload = closeMe;
于 2011-06-10T11:16:58.137 回答