JS:需要有关setTimeout()行为的解释

时间:2014-08-10 13:30:47

标签: javascript range settimeout

我有2个按钮。第一个运行提醒,另一个停止它:

<input type="range" id="range" min="1" max="480" onInput="syncValues('intrvl',this);" />
<input type="text" id="intrvl" value="0.07" onInput="syncValues('range',this);" />

以下是脚本(可在Plunker上访问实时版本:http://plnkr.co/edit/9kslSw6lyflIkMTanCrA):

function syncValues(inpToId, inpFrom) {
  if (!inpFrom) inpFrom = document.getElementById('intrvl');
  document.getElementById(inpToId).value = inpFrom.value;
}
window.onload = function() {
  syncValues('range');
  var makeDecition = (function() {
    var tm,
      stp = false,
      gotm = false,
      sttm = function(cancel) {
        var min = document.getElementById('intrvl').value;
        tm = setTimeout(makeDecition, min * 60 * 1000);
      };
    return function(cancel) {
      console.dir(cancel);
      if (cancel) {
        stp = false;
        clearTimeout(tm);
      } else {
        if (gotm) {
          if (!stp)
            if (!confirm("Go on?")) gotm = null;
        } else {
          stp = false;
          gotm = true;
        }
        if (gotm !== null) sttm();
      }
    };
  }());
  document.getElementById('start').onclick = function(event) {
    makeDecition();
    event.currentTarget.disabled = true;
  };
  document.getElementById('stop').onclick = function(event) {
    makeDecition();
    document.getElementById('start').disabled = false;
    makeDecition(true);
  };
};

我希望在单击“停止”按钮后,超时将被删除,脚本将立即终止。但它告诉我确认。我检查了调用makeDecition(true)后发生了什么,发现该函数没有得到 cancel 参数,首先,如上所述,它调用confirm并且只有在param到来之后才调用。 任何人都可以解释如何修复它以及它为什么会发生?

1 个答案:

答案 0 :(得分:0)

你对你的&#34; makeDecition&#34;进行了一次迷失无争议的电话。在你的&#34;停止&#34;开始时的功能处理程序:)