javascript中的事件监听器

时间:2010-02-03 22:32:38

标签: javascript javascript-events

javascript是否有一种事件监听器?

我的情景:
我想用不同的参数执行Inc函数2次,首先执行Inc然后执行第二次执行,但是第二次执行必须在第一次Inc函数完成后的X秒(settimeout ...)之后执行(所有它的迭代,一旦clearInterval)。

所以我需要一些事件和一个监听器(当然它必须是异步的) 你能提出什么建议? (请不要jquery ......)

function Inc(val1,val2){                               
     var intervalID = setInterval(function(){
          if (val1 > val2) clearInterval(intervalID);
          val1= val1 + 10;                        
      }, 400);

}

3 个答案:

答案 0 :(得分:2)

我经常试图远离超时,特别是如果他们处理需要递归的事情。

但是如果函数只执行两次,为什么还需要递归呢?

// call Inc the first time
Inc();

// this will execute only after the first Inc(); is done.
// call Inc the second time after X seconds
setTimeout(Inc, 400);

答案 1 :(得分:1)

编辑:好吧,因为我不知道为什么你不想让它知道延续,这里有另一个建议,它具有完全相同的语义,但可能是一个理想的语法,现在有了无论如何模拟事件委托:)(事情是,你需要Inc函数以某种方式报告完成):

function Inc(val1,val2){
    var handle = { oncomplete: null };

    var intervalID = setInterval(function(){

        if (val1 > val2)
        { 
            clearInterval(intervalID);
            if (handle.oncomplete) handle.oncomplete();
        }

        val1 = val1 + 10;

    }, 400);

    return handle;
}

Inc(10, 40).oncomplete = function(){ alert("Finish"); };

上一篇:这样的事情应该是诀窍(虽然我没有测试过):

function Inc(val1,val2, continuation){                               
 var intervalID = setInterval(function(){
  if (val1 > val2)
  { 
    clearInterval(intervalID);
    if (continuation) continuation();
  }

  val1 = val1 + 10;                        
 }, 400); }

然后这样称呼:

Inc(x, y, function(){ Inc(y, z); });

答案 2 :(得分:0)

AFAIK没有标准化的自定义事件类型,但您正在进行解决方案。

以这种方式呼叫“代表”:

var myFunction = function() {
    // CALL Inc with different params, this is your "event"
};

function Inc(val1, val2) {
   setInterval(myFunction,400);
}

简短回答,不是自定义事件(只有DOM标准事件),但你可以伪造它。