为了防止不耐烦的用户经常点击指向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知识..
或者可能有不同的方法来解决这个问题?
答案 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;">