2009-04-30 59 views
1

爲了防止不耐煩的用戶經常點擊鏈接到webstart應用程序,我試圖在第一次調用超鏈接幾秒後禁用它。如何在點擊後禁用鏈接一段時間?

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

上面的代碼僅用於禁用鏈接,但在10秒超時後不會重新啓用。

我已經看到,'this.clicked'變量是不正確的(因爲它應該是),當我在setTimeout調用中檢查它。也許我錯過了一些基本的JS知識在這裏..

或者也許有不同的方法來解決這個問題?

+0

嘗試使用函數而不是做一切內聯..它將更容易調試代碼。 另外,考慮學習JQuery。這將使得向鏈接的「禁用」添加視覺效果變得更容易。 – 2009-04-30 13:40:46

+0

我也不喜歡內聯代碼,但我正在JSF視圖中工作,我必須承認,我不知道如何以及在哪裏聲明JS函數。但是,這是另一個故事,我想 – 2009-04-30 14:19:40

回答

1

給這種定位的一個ID,然後更改逾呼籲:

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

我認爲「這個」當定時器惡有惡報不計算任何東西。使用

1

你的代碼修改只是一小部分,可能工作

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

看起來像人說,沒有工作和它沒有形成一個閉合圍繞「這個」

+0

是的,也很好:)基本上問題是'this'是一個字符串。這種方式實際上是一個對象 – 2009-04-30 13:38:22

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

首先加本函數轉換爲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)" 
0

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;">