【问题标题】:setTimeout with changing timeout valuesetTimeout 更改超时值
【发布时间】:2023-04-06 09:09:01
【问题描述】:

我正在处理 jQuery 中的一些超时问题,但我的超时值有问题。 所以,我得到了一个值数组(例如:[“2490”,“4200”]),我希望我的超时时间在 2490 毫秒后打印数组的值,然后返回 0 并最终打印下一个值4200 毫秒后的数组。但它永远不会回到 0

其实这是 jQuery 代码:

var array = ['2490', '4200'];
var mytimeout;

for (var i = 0; i < array.length; ++i)
{
    doTimeout(i);
    clearTimeout(mytimeout);
}

function doTimeout(i) {
    mytimeout = setTimeout(function() {
       $('#text').append(array[i]);
    }, array[i]);
}

JSFIDDLEhttps://jsfiddle.net/2aftscou/

所以一切似乎都可以正常工作,除了我希望我的计时器在它结束时在 0 处重新初始化(这就是我使用 clearTimeout() 的原因,但它在此不起作用案例)。

我真的不知道该怎么办

【问题讨论】:

  • timer 被清除,回调将不会被调用..
  • 这是期望的行为吗? jsfiddle.net/Lbjfafpz
  • 是的,谢谢老兄。
  • 注意:我认为setTimeout() 在任何情况下都只执行一次,clearTimeout() 只有在你想在它发生之前取消一次超时时才需要。 setInterval() 正在重复。
  • @ebyrob 你说得对,谢谢指正

标签: javascript jquery arrays settimeout


【解决方案1】:

这行不通。您的超时将在启动后被终止。在执行旧超时后,您必须启动新超时。

类似的东西

function doTimeout(i) {
    mytimeout = setTimeout(function() {

    $('#text').append(array[i]);
    i++;
if (i<array.length) {
doTimeout(i)
 }

   }
}

【讨论】:

    【解决方案2】:

    您当前的实现是立即清除超时。您可以将超时与此类链接在一起

    var array = ['2490', '4200'];
    var mytimeout;
    
    function doTimeout(i) {
      mytimeout = setTimeout(function() {
        $('#text').append(array[i]);
        if (i <= array.length)
          doTimeout(i + 1);
      }, array[i]);
    }
    
    doTimeout(0);
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <p id="text">
    
    </p>

    【讨论】:

    • 那行得通,谢谢伙计,老实说我不习惯 Javascript ^^
    猜你喜欢
    • 2013-11-03
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 2019-01-11
    相关资源
    最近更新 更多