javascript避免多次通话

时间:2011-05-03 06:07:52

标签: javascript function

我的问题是我想避免在调用javascript函数一段时间后(例如5秒后)调用它。

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

谢谢, 德万

2 个答案:

答案 0 :(得分: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 :(得分:2)

由于您使用的是链接,而不是按钮,而不是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;
    }
  }
}());

这类事情通常在服务器上处理,因为客户端脚本不是特别可靠 - 无论您使用何种策略,都无法保证dealy 实施。