无法通过javascript事件和函数制作感官

时间:2015-10-06 17:38:03

标签: javascript jquery html asp.net

这是在我的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?";
}

现在,我想要做一些更复杂的事情时遇到两个问题:

  1. 我希望它不惜一切代价出现:

    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...
    
  2. 我希望它能够在没有与第一个结合时运行工作的其他功能:

    comfirmExit = function(){
        if (confirm("Wish to save?") == true) {
        document.getElementById('<%= btnEnregistrer.ClientID %>').click();
        }
     }
     // works, but not when combine to the first function
    
  3. 我试图将这一切放在一起......我希望unload事件能够运行我的确认框功能:

        window.onbeforeunload = function (e) {
    
            if (a == 0) {
                a = 1;
            comfirmExit = function(){
            if (confirm("Wish to save?") == true) {
            document.getElementById('<%= btnEnregistrer.ClientID %>').click();
                }
            }
        }
    

    现在我意识到我远不是javascript专家......

1 个答案:

答案 0 :(得分:1)

beforeunload事件不会为用户运行任何突兀的Javascript(即alertconfirm等。

但是有一个解决方法,步骤应该是这样的:

  • 创建一个布尔标志,以检查用户是否已取消退出页面(默认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);
    }
  }
})();