1

我的应用程序的会话管理会将用户重定向到一个页面,用户被告知他们的会话已超时,请<a href="path/to/page.html" id="manual_link">sign in</a>.

我正在尝试对以下行为进行编程:

  1. 如果 JavaScript关闭(或不可用),用户必须单击“登录”链接(POHTML;没问题)。
  2. 如果 JavaScript 正在运行

    一个)。逐步增强链接以提交带有“security_redirect” ( document.getElementById('manual_link').onclick = "javascript:submit_security_redirect(); return false;";) id 的隐藏表单

    b) 如果用户没有先点击链接,则延迟 4 秒后自动提交表单(假设remaining_time为 4000):

        setTimeout(function () {
            submit_security_redirect();
        }, remaining_time);
    

四秒延迟然后提交正在发生,但如果用户不想等待四秒,我似乎无法拦截链接。换句话说,如果用户在一秒钟后点击链接......直到四秒钟结束后才会发生任何事情。

我怀疑我需要在链接单击时终止 setTimeout,但不知道如何(我对clearTimeout的摸索尝试非常令人失望,我什至没有将它们包含在示例 JSFiddle 中)。和/或我需要防止a的默认行为(尽管我认为return false将其排除在外)。

需要哪些修改才能实现所需的功能?

4

1 回答 1

2

您不能以与在 HTML 中onclick设置属性相同的方式进行设置onclick——您需要将其设置为函数,例如:

document.getElementById('manual_link').onclick = function() {
    submit_security_redirect(); return false;
};

通过 Javascript 添加事件处理程序时,调用addEventListener实际上比设置更好onclick,但不幸的是在 IE 8 及以下版本中不起作用,这也是 jQuery 等跨平台库非常适合事件处理的原因之一。

顺便说一句,arguments.callee 已弃用(请参阅Arguments.callee 已弃用 - 应该改用什么?)。

于 2013-02-25T01:13:28.800 回答