仅当var在jQuery中已经存在一定时间的特定值时才触发函数

时间:2011-12-13 04:44:43

标签: javascript

变量i,从09的变化值不断随机变化;仅在A 200毫秒时触发函数i==1。想知道是否有任何功能可以解决这个问题?

3 个答案:

答案 0 :(得分:2)

您需要使用setTimeout [MDN] 来监控变量的值。我将间隔设置为200ms,并在变量为目标值时设置标志。如果变量仍然是下一个时间间隔的目标值,请执行您的函数。

var i = 0;

function A() {
}

$(function() {
    var targetFlag = false,
        targetVal = 1,
        triggerA = function() {
            if (i == targetVal) {
                if (targetFlag) {
                    A();
                } else {
                    targetFlag = true;
                }
            } else {
                targetFlag = false;
            }

            setTimeout(triggerA, 200);
        };

    triggerA();
});

答案 1 :(得分:1)

我还没有对它进行过测试,但是这条线上的某些东西应该适用于你想要做的事情:

//called when i == 1
function setTrigger( triggerCallback, testCondition, time ) {
    var _triggerIfTrue = function () {
        trigger( triggerCallback, testCondition, time );
        if(testCondition()) {
            triggerCallback();
        }
    };
    return setTimeout( _triggerIfTrue, time );
}

//called when i != 1
function removeTrigger( triggerId ) {
    clearTimeout(triggerId);
}

然后您可以这样使用它:

function callBack() {
    //do something 
}

function testCondition() {
    //if i == 1, return true
    //else return false
}

var i, triggerId;
function updateValue(newI) {
    i = newI;

    if( i == 1 )
        triggerId = setTrigger(callBack, testCondition, 200);
    else 
        removeTrigger(triggerId);
}

答案 2 :(得分:1)

以下呼叫A()仅在i持续值为200且持续200毫秒时才会调用{。}}。

更新您的代码,以便它不会直接更改i变量。而是创建一个setI()函数。在该函数中,如果新值不是1,则清除任何先前的timeOut。如果值为1并且还没有超时,则设置一个新值(我假设连续多次将其设置为1不会重置超时)。大致像这样:

var i,
    timerID;
function setI(val){
   i = val;

   if (val != 1 && timerID != null) {
      clearTimeout(timerID);
      timerID = null;
   }

   if (val === 1 && timerID === null) {
      timerID = setTimeout(function() {
        timerID = null;
        A();
      }, 200);
   }
}