【问题标题】:Setinterval - One click then another Click after 2 seconds. Run Once. NO LOOPSetinterval - 2 秒后单击然后再单击。运行一次。没有循环
【发布时间】:2021-02-21 00:16:08
【问题描述】:

我查看了很多关于 setInterval 的帖子,但没有一个给出我正在寻找的答案或我正在努力实现的目标。

我正在寻找一个 setInterval 函数,只需单击 2 次。第一次点击与第二次点击相隔 2 秒。它只运行一次我目前拥有的是一种使用两个函数的解决方法,它可以工作..但我宁愿将它们放在一个函数中而不是两个函数中。

第一次点击是在一秒钟内立即运行 (1000) 它关闭打开的模式。然后下一次单击是在 2 秒(2000)后删除一个克隆。以下是我目前在$each 中使用的内容。感谢您的帮助。

$.each(deleteCard, function( i, person ) {
    setTimeout(function() {  
        $("#"+person.id).find('.close-modal').click(); 
    }, 1000);

    setTimeout(function() { 
        $("#"+person.id).find('.card').remove(); 
    }, 2000);  
}); 

【问题讨论】:

    标签: javascript settimeout setinterval


    【解决方案1】:

    我不认为setInterval 在这里会有所帮助。只重复两次是一个糟糕的选择(您的原始代码也有不规则的延迟,setInterval 做得不好)。

    我会使用 Promise 并编写一个等待函数作为通用实用程序,您可以将其隐藏在某个帮助文件中:

    const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
    
    $.each(deleteCard, async function (i, person) {
      await wait(1000);
      $("#" + person.id).find('.close-modal').click();
      await wait(1000);
      $("#" + person.id).find('.card').remove();
    });
    

    【讨论】:

    • 谢谢ggorlan。您的解决方案听起来非常好。我想我会在我的例子中修改时间 1000,因为 30 代表 immidiate,因为 1000 是 1 秒,当然 2000 是 2 秒。我不想必须使用外部文件,除非我真的有。所以我想看看还有什么其他建议。
    • 如果您的意图是立即触发某些东西,那么您可以完全跳过第一个 wait/setTimeout 并只使用一个延迟为 2000 毫秒的 setTimeout,所以没有必要如果这是您唯一一次这样做,那么对于这种抽象。您没有必须拥有外部文件,这只是说明“客户端”代码非常干净的建议。如果您发现您的代码中充满了setTimeouts,您可以一次性承诺setTimeout 并在整个代码库中使用wait
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 2013-03-02
    • 2022-10-23
    相关资源
    最近更新 更多