这是在我的ASP页面的<script type="text/jscript">
标记中按原样运行的代码,一个经典的onBeforeUnLoad事件:
window.onbeforeunload = function (e) {
a = 1;
e = e || window.event;
e.preventDefault = true;
e.cancelBubble = true;
e.returnValue = "do you wish to save?";
}
现在,我想要做一些更复杂的事情时遇到两个问题:
我希望它不惜一切代价出现:
var a = 0;
window.onbeforeunload = function (e) {
if (a == 0) {
a = 1;
e = e || window.event;
e.preventDefault = true;
e.cancelBubble = true;
e.returnValue = "Wish to save?";
}
}
//Does not work...
我希望它能够在没有与第一个结合时运行工作的其他功能:
comfirmExit = function(){
if (confirm("Wish to save?") == true) {
document.getElementById('<%= btnEnregistrer.ClientID %>').click();
}
}
// works, but not when combine to the first function
我试图将这一切放在一起......我希望unload事件能够运行我的确认框功能:
window.onbeforeunload = function (e) {
if (a == 0) {
a = 1;
comfirmExit = function(){
if (confirm("Wish to save?") == true) {
document.getElementById('<%= btnEnregistrer.ClientID %>').click();
}
}
}
现在我意识到我远不是javascript专家......
答案 0 :(得分:1)
beforeunload
事件不会为用户运行任何突兀的Javascript(即alert
,confirm
等。
但是有一个解决方法,步骤应该是这样的:
false
)。创建beforeunload
事件处理程序,并检查游戏是否存在
保存。
如果它已经保存,那么,你什么都不做,让用户去吧
但如果不是,则将该布尔标志更改为true
。
您保持间隔脏检查该变量是否为true
,并且在任何时候,您为用户保存游戏,然后再次将此变量设置为false
。
所以,这样做,你将确保用户在没有保存的情况下总是看到一条消息,如果他们取消退出,游戏将自动保存,使下一次尝试非常顺利。
看一下下面的例子。要测试它,请打开控制台,单击Run
。然后,再次尝试点击Run
,您会看到一条退出的消息。如果您确认,您的控制台将不会显示任何内容。但是,如果您取消它,那么,您将被保留在页面中,然后您再次尝试单击Run
,您将看到不会显示任何消息,但控制台将记录true
(function() {
var game = { saved: false };
var canceled = false;
setInterval(function() {
if (canceled) {
game.saved = true;
canceled = false;
}
}, 100);
window.onbeforeunload = function() {
if (!game.saved) {
canceled = true;
return 'Are you sure?';
}
else {
console.log(game.saved);
}
}
})();