使用window.onbeforeunload时捕获用户响应

时间:2010-01-20 18:27:58

标签: javascript dom

有没有办法捕获用户是单击确定还是取消?

如果用户离开页面,我只需要做一些事情......

4 个答案:

答案 0 :(得分:7)

以下是我正在使用的解决方案,我需要在用户从页面导航时执行某些操作(例如清除会话)。

我有2个全球大战

var clearSession = true;
var confirmExit = true;


    window.onbeforeunload = function() { return confirmExit(); }
    window.onunload = function() { return clearSession(); }

function confirmExit() {
    if (needToConfirm == true) {       

        return "exit page?";
    }
}


function clearSession() {

     if (clearSession == true) {
        alert("Killing the session on the server!!!");
        PageMethods.ClearSession();
    }
}

然后,当然,在每个页面提交/按钮/下拉列表等...您需要确保上述全局变量设置为false。

希望这有助于某人。

答案 1 :(得分:4)

不,浏览器允许您仅在警告框中指定文本,但无法捕获结果。

答案 2 :(得分:1)

您可以使用一个setTimeout来验证。

window.onbeforeunload = function() {
    if (needToConfirm) {
        setTimeout(function() {
            alert('User still is on the page');
        }, 0);
        return 'Are you sure you want to leave?';
    }
};

基本上,onbeforeunload函数会阻止执行,只有当用户仍在页面上时才会执行超时。 0毫秒只是将它放在执行队列的底部。

答案 3 :(得分:0)

这是一个编程技巧或者更确切地说是一种可以尝试的解决方法。 我没有找到任何" javascript提供"默认方式

我有一个网页(里面有一个表格),位于本地系统上,需要保护他们免受未经授权的用户输入任何输入。

我创建了一个JavaScript函数,可以加载主页面。

如下所示

<script src="./resources/brazil-uam-all-javascript.js"></script>
  </head>
<body id="uam_gui" onload="authenticate2();">
<div id="UAM_tool">

现在的JAVASCRIPT功能

用户在使用对话框提示时输入值。如果用户没有输入任何值,只需单击确定或取消或使用ESC键或&#34;关闭&#34;按钮以避免身份验证,然后页面将以相同的提示退回。 在这里,我间接捕捉用户的回复。 希望它有助于满足您的要求。

function authenticate2() {
var prompt_for_the_magic_number = prompt("Enter Your                         M  A  G  I  C    N  U  M  B  E  R     :::   ", "");
  if (prompt_for_the_magic_number === true)
  {
      if (prompt_for_the_magic_number.length === 0)
      {
          alert("You are supposed to ENTER A VALUE");
          location.reload();
      }
      else
      {
          if (prompt_for_the_magic_number.length > 4)
          {
              alert("You are supposed to ENTER ONLY 4 DIGITS");
              location.reload();
          }
          esle
          {
              //some code to allow access based on a logic
          }
      }
  }
  else
  {
      alert("You are supposed to ENTER 4 DIGITS");
      location.reload();
  }
}