在另一个函数

时间:2015-07-23 13:49:00

标签: javascript jquery

function One(){
   setTimeout(function(){ 
            Two();
    },3000);
}

function Two(){
   setTimeout(function(){ 
            One();
    },3000);
}

function Stop(){
   alert('this should run,and the functions above should stop');
}

当你点击第三个时,我想停止前两个功能的自动运行。 到现在为止,如果你点击第三个,警报会显示,但循环继续。任何方式这样做?

5 个答案:

答案 0 :(得分:2)

var oneTimeout, twoTimeout;

function One(){
   oneTimeout = setTimeout(function(){ 
            Two();
    },3000);
}

function Two(){
   twoTimeout = setTimeout(function(){ 
            One();
    },3000);
}

function Stop(){
   clearTimeout(oneTimeout);
   clearTimeout(twoTimeout);
   alert('this should run,and the functions above should stop');
}

答案 1 :(得分:1)

如果存储超时呼叫的ID,您可以随时清除它。

var timeoutId1, timeoutId2;

function One() {
  timeoutId1 = setTimeout(function() {
    Two();
  }, 3000);
}

function Two() {
  timeoutId2 = setTimeout(function() {
    One();
  }, 3000);
}

function Stop() {
  // alert('this should run,and the functions above should stop');
  clearTimeout(timeoutId1);
  clearTimeout(timeoutId2);
}

答案 2 :(得分:0)

您应该在前两个函数中使用var timer = setTimeout(function()...); return timer;并将两个timer变量(其中包含一个标识超时计时器的数字)传递给第三个函数。然后在调用第三个函数时调用clearTimeout(timer)

查看此MDN docs for timeout

答案 3 :(得分:0)

var timeout1;
//... Define Function name 
function rotate() {
timeout1 = setTimeout( rotate, 4000);
 }
  • 另一种方式

    var rotateTimeout;
    rotateTimeout = window.setInterval(rotate,4000); 
    window.clearInterval(rotateTimeout);
    

答案 4 :(得分:0)

这样的事情:

function TimerController(){
    var ids = {};
    this.start = function(id, time, fn) {
        ids[id] = setTimeout(function(){
            fn();
            delete ids[id];
        }, time);
    }
    this.stop = function(id) {
        clearTimeout(ids[id]);
        delete ids[id];
    }
    this.stopAll = function() {
        for (var id in ids) this.stop(id);
    }
}

var ctrlr = new TimerController();

function One(){
    ctrlr.start('one', 3000, Two);
}

function Two(){
    ctrlr.start('two', 3000, One);
}
function Stop() {
    ctrlr.stopAll();
}

小解释: javascript中的超时和间隔都返回标识符,可用于事件取消。

var id = setTimeout(function(){console.log('Triggered!');}, 0); 
clearTimeout(id);

以上示例中永远不会调用函数。

因此,如果我们想要阻止它,我们应该存储超时ID 上面的TimerController包含了这个逻辑。