javascript - 检查Javascript中是否存在事件超时

标签 javascript jquery settimeout

有没有办法查明是否有事件的定时器?

我有 n 个持续时间不同的计时器,例如:

Timer 1 -> 2-sec

Timer 2 -> 8-sec

..

...

Timer n -> n-sec

我需要知道所有计时器何时结束

HTML

<div id="time-out-1">
   Time out 1:<span></span>
</div>

<div id="time-out-2">
   Time out 2:<span></span>
</div>

<button>
   Are all timers finished ?
</button>

JS

setTimeout(function () {
        $("#time-out-1 span").text("Finished !");
 },2000);


  setTimeout(function () {
        $("#time-out-2 span").text("Finished !");
 },8000);

 $('button').click(function(){
        // if all timers are finished
        // do something
 });

Jsfidle

注意:我需要这个特定示例的解决方案,因为在我的项目中有 n 个 js 文件,这些文件可能具有像这个示例一样声明的计时器

最佳答案

这是我的做法,围绕原生函数创建一个包装器

(function(w) {
     var active = {};

     var _setTimeout = w.setTimeout;
     var _clearTimeout = w.clearTimeout;

     w.setTimeout = function(fn, delay) {
         var id = _setTimeout(function() {
             fn();
             delete active[id];
         }, delay);
         active[id] = true;
         return id;
     }

     w.clearTimeout = function(id) {
         delete active[id];
         _clearTimeout(id);
     }

     w.activeTimers = function() {
         return Object.keys(active).length > 0;
     }
})(window);

然后像这样使用它

setTimeout(function () {
    $("#time-out-1 span").text("Finished !");
},2000);


setTimeout(function () {
    $("#time-out-2 span").text("Finished !");
},8000);

$('button').click(function(){
    if ( window.activeTimers() ) {
        // still something going on
    } else {
        // all done !
    }
});

FIDDLE

关于javascript - 检查Javascript中是否存在事件超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34294544/

相关文章:

javascript - ClearTimeout 不能很好地工作(可能是在第一次定时器触发之前清除时)

javascript - 样式动态表格,TD固定宽度

Javascript - 基于动态填充下拉菜单的转到 url

javascript - 如何限制textExt插件的输入总数?

javascript - 如何在 javascript 的单个循环中转换多个 if?

javascript - 如何告诉 .hover() 等待?

javascript - 如何使用 jquery 查找单词匹配项?

javascript - 在WebKit/JavaScriptCore中获取Javascript的返回值

javascript - jQuery:汇总表行中的多个输入

JavaScript 计时器未更新