延迟后提交隐藏的表单,如果点击链接则立即提交

时间:2013-02-25 00:47:57

标签: javascript progressive-enhancement

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

我正在尝试编写以下行为:

  1. 如果JavaScript off (或其他方式不可用),则用户必须点击“登录”链接(POHTML;没问题)。
  2. 如果JavaScript 正在运行

    A)。逐步增强链接,改为提交ID为“security_redirect”的隐藏表单(document.getElementById('manual_link').onclick = "javascript:submit_security_redirect(); return false;";

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

        setTimeout(function () {
            submit_security_redirect();
        }, remaining_time);
    
  3. 4秒延迟然后提交正在发生,但如果用户不想等待4秒钟,我似乎无法获得拦截链接。换句话说,如果用户在一秒钟之后点击链接......直到四秒钟结束才会发生任何事情。

    我怀疑我需要在链接点击时杀死setTimeout,但不知道如何(我对clearTimeout的笨拙尝试是如此令人失望,我甚至没有将它们包含在the example JSFiddle中)。和/或我需要阻止a的默认行为(尽管我认为return false正方形)。

    实现所需功能需要进行哪些修改?

1 个答案:

答案 0 :(得分:2)

您不能像在HTML中设置onclick属性一样设置onclick - 您需要将其设置为函数,例如:

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

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

BTW,arguments.callee已弃用(请参阅Arguments.callee is deprecated - what should be used instead?)。