2010-08-16 237 views

回答

3

我不知道是否有直接的方法来做到这一点,但你总是可以自己模拟浏览器的确认框。这里有一个简单的功能,我做了基于该specs at MSDN

function triggerBeforeUnload() { 
    var event = {}; 
    handler(event); 

    if (typeof event.returnValue == 'undefined' || 
     confirm('Are you sure you want to navigate away from this page?\n\n' + event.returnValue + '\n\nPress OK to continue, or Cancel to stay on the current page.')) { 
    // Continue with page unload 
    } else { 
    // Cancel page unload 
    } 
} 

编辑:jquery.formobserver.jsfunction beforeunload(e) { ... }的定义之后,加入这一行:

handler = beforeunload; 

注意在原来的变化代码:window.onbeforeunload已被替换为handler

+0

在Firefox和IE8我上调用一个错误window.onbeforeunload。 Firefox的错误是“window.onbeforeunload不是一个函数”,IE又回来了“对象不支持这个属性或方法” – mutex 2010-08-16 03:41:07

+0

好的,所以问题是插件通过'addEventListener' /'attachEvent'附加一个事件处理程序而不是直接通过'window.onbeforeunload'。我想你必须修改插件代码才能获得对'beforeunload'函数的引用。 – casablanca 2010-08-16 03:49:04

+0

谢谢!现在起作用了。有关避免使用全局处理程序的任何建议吗? – mutex 2010-08-16 04:40:20

2

您可以用.trigger()方法做到这一点:

$('button').click(function(){ 
    $(window).trigger('beforeunload'); 
}); 
+3

做一个小提琴这几乎是我尝试的第一件事,但似乎触发不能用在'beforeunload'上,因为当我打电话时似乎没有任何事情发生。 – mutex 2010-08-16 03:34:44

+0

@mutex我在回答之前想知道同样的事情,所以我设置了这个简单的测试:http://jsfiddle.net/LpGq9/。也许它与形式观察插件如何绑定onbeforeunload事件处理程序有关。 – Pat 2010-08-16 03:41:04

+0

是的,你可能是对的。该插件不使用绑定;它取而代之: if(window.attachEvent){ window.attachEvent('onbeforeunload',beforeunload); (window.addEventListener){window.addEventListener('beforeunload',beforeunload,true);}} } – mutex 2010-08-16 03:43:46

1

我碰到这个问题,迷迷糊糊,而寻找问题的答案我自己的问题,这是性质相似。所以,我在这里想出了一个解决方法。我只需要在用户点击一个特定按钮而不是其他人时调用“onbeforeunload”。希望这可以解释你的问题。

我在jsfiddle工作。您可以在我设置的演示中对其进行测试,并且可以清楚地看到它仅适用于其中一个按钮。然而,有一个警告,我没有打扰寻找修复。如果你点击按钮并选择留在页面上,那么所有后续的按钮/链接/重定向/重新加载将触发“onbeforeunload”。欢迎您提出自己的解决方案来处理“bug”(因为缺乏更好的条款),以便在用户决定留在页面时不会引起该反应。但是,它正在运行并且执行您在测试环境中要求它执行的操作。

下面的代码:

$(document).ready(function() { 
     $('.testButton').click(function() { 
      window.onbeforeunload = function() { 
       return "Enter your message here..."; 
      } 
     }); 
    }); 

编辑:

因此,研究其他方法可以做到同样的事情后,我所遇到的另一种方式把事件到按钮使用jQuery的。对() 方法。代码可以看到here,验证旧代码已被注释掉。同样,同样的“错误”与以前一样,但仍然提供了被请求的功能。

这里的选择:

$(document).ready(function() { 
     $('.testButton').on("click", function (event) { 
      window.onbeforeunload = function() { 
       return "Enter your message here..."; 
      } 
     }); 
    }); 
相关问题