【问题标题】:Call function repeatedly after click点击后重复调用函数
【发布时间】:2013-04-20 12:23:52
【问题描述】:

我的代码有什么问题,我只想在点击时调用一个函数,然后每 5 秒重复一次?

$("#ref").on("click", ".mc", function(event) {
   var ref_id = $(this).attr('ref_id');
      return getRef(ref_id);
      window.setInterval(function(ref_id){
       getRef(ref_id);
      }, 5000);
});

以及如何在二次点击时删除 setInterval?

感谢任何提示!

【问题讨论】:

    标签: jquery refresh


    【解决方案1】:

    我的代码有什么问题

    您的代码永远不会到达对setInterval 的调用,因为您的

    return getRef(ref_id);
    

    行结束函数。

    如何删除二次点击时的 setInterval?

    通过记住您是否有一个正在运行。 setInterval 返回一个“计时器句柄”,这是一个不是 0 的数字,您可以使用它来关闭它。所以你可以使用一个变量,初始化为0,来记住你是否有一个定时器正在运行(并记住句柄以便你可以关闭它):

    (function() {
        // A handle for setInterval, 0 = not set
        var timer = 0;
    
        $("#ref").on("click", ".mc", function(event) {
           if (timer) {
              // Timer is set, cancel it
              clearInterval(timer);
              timer = 0;
           }
           else {
              // Timer is not set, set it
              var ref_id = $(this).attr('ref_id');
              // No `return` on the next line, it ends the function
              getRef(ref_id);
              timer = window.setInterval(function(ref_id){
                 getRef(ref_id);
              }, 5000);
           }
    
           // If you need to return something from the click (for instance,
           // `false`), do so here
        });
    })();
    

    在上面我假设你在停止计时器时根本不想打电话给getRef

    【讨论】:

    • 一个很好的答案,谢谢!我有几个用于调用该函数的链接,我想在单击新链接时取消所有“其他”,因此只有 1 个间隔是“活动的”。将计时器引用存储在变量中并在另一个调用中覆盖它是最简单的,对吧?
    • @RaphaelJeger:是的,所有事件处理程序都可以访问的变量。请确保在启动另一个计时器并将其分配给 timer 之前取消前一个计时器。
    • 谢谢!这实际上非常简单,将计时器值存储在全局中,检查它是否存在,如果存在,则在设置新值之前取消。太好了!
    • @RaphaelJeger:不用担心。 :-) 我会避免实际创建一个global,但只要确保它是一个所有事件处理程序都可以访问的变量。例如,在我上面的示例中,只需在我包裹代码的匿名函数中定义其他事件处理程序。然后所有的处理程序都可以访问timer,但timer实际上并不是一个全局变量。
    【解决方案2】:

    函数中return getRef(ref_id); 之后的所有内容都将被忽略。

    您可能应该删除 return 关键字。

    【讨论】:

    • omg 我真是个傻瓜:) 我在 getRef 中有一个 return false 但这应该到这个函数的末尾,现在我这样使用它:) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2016-09-17
    • 2017-07-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    相关资源
    最近更新 更多