2011-05-03 136 views
4

我的问题在这里是我想避免调用JavaScript函数一段时间后(比如5秒后)。javascript避免多次呼叫

我创建了一个链接,它调用javascript函数。如果用户双击它被称为两次我想避免这种情况。

谢谢,德万·奈尔

回答

5

我认为处理,最明智的办法是,一旦它被点击禁用链接,然后重新启用它,当函数完成运行。假设你有jQuery的可用,像...

$('#button').click(function() { 
    $(this).attr("disabled", "true"); 
    doTheFunction(); 
    $(this).attr("disabled", "false"); 
}); 

如果你真的需要等待的函数被调用后一段设定量,那么你可以使用的setTimeout重新启用按钮。

$('#button').click(function() { 
    $(this).attr("disabled", "true"); 
    doTheFunction(); 
    var btn = $(this); 
    setTimeout(function() { 
    btn.attr("disabled", "false"); 
    }, 5000); // reenable the button 5 seconds later 
}); 

编辑:(下面的注释)

中的链接,我会模仿上述通过添加和删除的一类,因为你是对的,有没有禁用的属性。

$('#link').click(function() { 
    if ($(this).hasClass('disabled_link')) { 
    return; 
    } 
    $(this).addClass("disabled_link"); 
    doTheFunction(); 
    var link = $(this); 
    setTimeout(function() { 
    link.removeClass("disabled_link"); 
    }, 5000); // reenable the button 5 seconds later 
}); 
+1

我正在使用标记来调用该函数。我认为标签没有禁用属性。如我错了请纠正我。 – Devan 2011-05-03 06:23:00

+0

@Devan;编辑我的答案,希望有所帮助! – goggin13 2011-05-03 06:30:27

1

由于您使用的链接,而不是一个按钮,而不是jQuery的(显然),这里是如何停止功能,5秒做任何事情(或任何耽误你想要的)已经打来电话,完成后东西:

var someFn = (function() { 

    var lastCalled; 

    return function() { 
    var now = new Date(); 
    var limit = 5000; // minimum milliseconds between calls 

    if (!lastCalled || (now - lastCalled) > limit) { 
     lastCalled = now; 
     // do stuff 
     alert('hey'); 
    } else { 
     return; 
    } 
    } 
}()); 

这种事情通常是在尽管服务器处理,因为客户端脚本不是特别可靠的 - 你不能保证迪利实施,不管你用什么策略。