单击后如何禁用Link一段时间?

时间:2009-04-30 13:31:01

标签: javascript html

为了防止不耐烦的用户经常点击指向webstart应用程序的链接,我尝试在第一次调用超链接后几秒钟禁用该超链接。

<a href="file.jnlp" onclick="if (!this.clicked){this.clicked = true; setTimeout('this.clicked = false' ,10000); return true;} return false"> 

上面的代码仅适用于禁用链接,但在超时10秒后不会重新启用。

当我在setTimeout调用中检查时,我已经看到'this.clicked'变量不是真的(因为它应该是)。也许我在这里缺少一些基本的JS知识..

或者可能有不同的方法来解决这个问题?

5 个答案:

答案 0 :(得分:3)

首先将此函数添加到Javascript脚本块

function Debounce()
{

    var self = this
    if (this.clicked) return false;

    this.clicked = true;
    setTimeout(function() {self.clicked = false;}, 10000);

    return true;
}

现在将您的onclick更改为: -

onclick="return Debounce.call(this)"

答案 1 :(得分:1)

为此锚点提供一个ID,然后将超时调用更改为:

setTimeout('document.getElementById("<id>").clicked = false;' , 10000);

我认为当计时器出现时,'this'不会被评估为任何东西。

答案 2 :(得分:1)

使用您的代码只修改一小部分它可能会起作用

<a href="file.jnlp" onclick="if (!this.clicked){this.clicked = true; setTimeout(function(){this.clicked = false;} ,10000); return true;} return false">

看起来人们说没有用,并没有形成关于'this'的封闭

答案 3 :(得分:1)

var a=this;
setTimeout(function(){a.clicked = false} ,10000);

答案 4 :(得分:1)

this对象未在setTimeout评估的代码中定义,该代码在全局范围内完成。

为链接指定ID,然后使用getElementById,例如

<a href="file.jnlp" id='my_link' onclick="if(!this.clicked){this.clicked = true; setTimeout('document.getElementById(\'my_link\').clicked = false;' ,10000); return true;} return false;">