JQuery - 如何停止以前的函数执行或重置setTimeout()计时器

时间:2014-10-29 12:04:13

标签: jquery

总体思路如下:每次按下按钮,都会调用延迟2秒的功能。我可以用新的函数调用停止前一个函数计时器 - 再次按下按钮吗?

例如。

<script>
    $('#button').click(function() {
        //some logic here
        setTimeout(DoSomeOtherLogic, 2000);
    });

    function DoSomeOtherLogic() {
        //some other logic
    }
</script>
<div id="button">Button</div>

所以如果我按下&#34;按钮&#34;五次 - 将调用五个延迟为2秒的函数。但是我的想法是,当我停止按下&#34;按钮&#34;时,它应该只执行一次。每按一次按钮的含义 - 它会重置延迟计时器。

有可能吗?

已更新:已从示例中的setTimeout()调用中删除()

2 个答案:

答案 0 :(得分:4)

(应该是:setTimeout(myFunction, 2000);没有()

点击:后续点击仅在2秒后可用

$('#button').one("click", myFunction);

function myFunction() {
    setTimeout(function(){
       console.log("TESSSST");
       $('#button').one("click", myFunction);
    }, 2000);
}

http://api.jquery.com/one/

单击:清除上一个超时(重新启动2s超时)

var myTimeout;

$('#button').click(function() {
    clearTimeout( myTimeout );
    myTimeout = setTimeout(myFunction, 2000);
});

function myFunction() {
    console.log("TESSSST");
}

答案 1 :(得分:2)

尝试使用以下示例的全局软件开关使其正常工作。或者在每个新clearTimeout()之前使用setTimeout进行尝试(但使用clearTimeout不会表明您的功能已完成 - &gt;它可以同时调用多次,因此)。

此解决方案更清晰,因为:

此解决方案更清晰(是的,更多代码)。但它确保被调用函数中的逻辑部分在下一次“点击”传入后完成。 clearTimeout不这样做。使用clearTimeout - &gt;它只是清除了运行超时。一旦调用该函数(可能会运行几秒钟),用户将能够再次单击该按钮,这将触发新的超时(功能代码未完成!)。 以下解决方案确保在超时完成后调用函数,然后再开始另一次超时。

<script type="text/javascript">

    var globalState = false;

    $('#button').click(function() {
        //some logic here
        if (!globalState) {
           globalState = true;
           setTimeout(DoSomeOtherLogic, 2000);
        }
    });

    function DoSomeOtherLogic() {

        //some other logic

        //reset switch after logic is done
        globalState = false;
    }
</script>