javascript中断事件

时间:2009-09-02 05:47:05

标签: javascript javascript-events

情况如下:

如果我在第1页,我现在点击第1页的链接导航到第2页。在加载第2页之前我正在逃避,所以我仍然留在第1页。

此时我想跟踪该事件。

是否有任何javascript事件,以便我可以跟踪上述情况。

更多信息:

为了避免对“page-2”的并发请求,当用户点击第1页的链接时,我将重定向到第2页并禁用链接(以避免对“page-2”的多个请求)。当我们点击Esc并中止加载第2页时,我需要在第1页再次启用该链接。

4 个答案:

答案 0 :(得分:3)

我尝试使用此代码:

<html>
<head>
    <script>
    document.onkeypress = KeyPressed;

    function KeyPressed(e)
    {
        if (!e) e = window.event; //IE Compatibility
        alert(e.keyCode);
    }
    </script>
</head>

<body>
    <a href="http://stackoverflow.com">Stack Overflow</a>
</body>
</html>

它会检测您在页面上按下的任何键。一旦你点击SO链接并点击逃脱,没有任何反应。浏览器已经收到来自SO服务器的响应并开始处理它,此页面已经“离开”,尽管您在浏览器的状态栏中看到“等待http://stackoverflow.com”时出现。

答案 1 :(得分:1)

您处理此事件的想法是完全错误的。需要阻止按钮才能使用户无法进行双重发布数据。但是,在点击链接后立即发送请求(!)。

因此,如果您单击链接一次,请停止页面,然后单击第二次 - 它将提交两次,这不是预期的。

答案 2 :(得分:0)

页面卸载时会触发两个事件。

window.onUnload
window.onBeforeUnload

您可以使用这些事件来取消页面的卸载,但在此之后,该页面将被视为已完成。

您可以做的是让页面在转到新页面之前等待5秒左右:

例如:

window.onunload = (function() {
  var time = new Date();
  var cancel = false;
  window.onkeypress = function (e) {
    if ((e || window.event).keyCode == 27) cancel = true;
  };
  while(time > new Date() - 5000) {
    if (cancel) return false;
  }
});

事实上,由于您占用了JS脚本的所有处理时间,因此可能会导致某些浏览器挂起。即:在while块中。

你可以通过执行阻塞函数调用来避免这种情况,这不是那么过程密集,就像受网络延迟约束的那样。例如:XMLHttpRequest()等。我不认为排队的调用如setTimeout()会在这里工作,因为它们不会阻塞。

答案 3 :(得分:0)

由于<a href>标记告诉浏览器移动到另一个页面,因此可以决定它是否仍然会运行您的脚本。如果我是它,我就不会听。

如果你想覆盖它,我想你应该告诉浏览器来监听那个特定的onClick事件,然后放回一个回调来加载目标页面。背景。这可确保您的页面仍处于活动状态。目标页面加载后(通过您的脚本),您可以请求浏览器使用收到的内容更新自己。

这就是理论。我不知道DOM是否允许你覆盖加载页面的内容,但我想它确实如此。