Как отключить ссылку на некоторое время после нажатия? - PullRequest
2 голосов
/ 30 апреля 2009

Чтобы не дать нетерпеливым пользователям слишком часто нажимать на ссылку на приложение веб-запуска, я пытался отключить гиперссылку на несколько секунд после ее первого вызова.

<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 здесь ..

А может, есть другой подход к решению этой проблемы?

Ответы [ 5 ]

3 голосов
/ 30 апреля 2009

Сначала добавьте эту функцию в блок Javascript Script

function Debounce()
{

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

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

    return true;
}

Теперь измените ваш клик на: -

onclick="return Debounce.call(this)"
1 голос
/ 30 апреля 2009

Объект this не определен в коде, который оценивается setTimeout, что делается в глобальной области видимости.

Дайте ссылке идентификатор, затем используйте 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;">
1 голос
/ 30 апреля 2009

используя ваш код, изменяя только небольшую часть, он может работать

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

похоже, что люди говорят, что это не сработало, и это не образовало замыкания вокруг "этого"

1 голос
/ 30 апреля 2009
var a=this;
setTimeout(function(){a.clicked = false} ,10000);
1 голос
/ 30 апреля 2009

присвойте этой привязке идентификатор, а затем измените время ожидания вызова на:

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

Я думаю, что "this" ничего не оценивает, когда таймер включается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...