räph
räph

Reputation: 3674

How to disable Link for some time after being clicked?

To prevent impatient users from clicking on a link to a webstart application too often, I tried to disable the hyperlink for some seconds after it has been called the first time.

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

The code above only works for disabling the link, but it doesn't get re-enabled after the timeout of 10 seconds.

I've seen that the 'this.clicked' variable isn't true (as it is supposed to be) when I check it in the setTimeout call. Maybe i'm missing some basic JS-knowledge here..

Or perhaps there is a different approach to solve this problem?

Upvotes: 2

Views: 6479

Answers (5)

Chad Grant
Chad Grant

Reputation: 45382

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

Upvotes: 1

partoa
partoa

Reputation: 900

The this object is not defined in the code being evaluated by setTimeout which is done in the global scope.

Give the link an ID then use getElementById e.g.

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

Upvotes: 2

John Boker
John Boker

Reputation: 83699

using your code modifying only a small part it may work

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

looks like people say that didnt work and it didnt form a closure around 'this'

Upvotes: 2

AnthonyWJones
AnthonyWJones

Reputation: 189457

First add a this function to a Javascript Script block

function Debounce()
{

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

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

    return true;
}

Now change your onclick to:-

onclick="return Debounce.call(this)"

Upvotes: 3

Peter Perh&#225;č
Peter Perh&#225;č

Reputation: 20782

give this anchor an ID and then change your timeout call to:

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

I think the 'this' is not evaluated to anything when the timer comes around.

Upvotes: 1

Related Questions