如何在jquery的while循环内捕获转义键按下事件?

时间:2018-12-22 11:05:45

标签: jquery

我正在jquery的无限循环内运行一个函数。我想按退出键时退出循环。我做不到。我的循环无限运行。以下是我到目前为止所做的事情:

var playLoop = function(){
    var myVar;
    var continueLoop = 1;
    while(continueLoop === 1){

        $(document).on("keyup",function(e){
            if(e.key==="Escape"){
                continueLoop = 0;
            }
            myVar = setInterval(addition,1000);

        });

    }
}

我想停止在循环内运行函数,即最终在按下“转义”键时循环。我想念什么?我该怎么办?

2 个答案:

答案 0 :(得分:2)

您需要使用.setTimeout,一旦您识别出按了转义键,就可以用.clearTimeout取消。下面的示例有效。

让我知道您是否还需要其他东西。

// Start your playLoop after document is ready
$(document).ready(function() {
  playLoop();
});


function playLoop() {

  // Append a dot so you know it's working
  $(".dots").append(".");

  // Set a new timeout to count down
  playLoopCountdown = setTimeout(playLoop, 1000);

}


// Attach escape key cancel
$(document).on("keyup", function(e) {

  if (e.key === "Escape") {

    // Stop playLoop
    clearTimeout(playLoopCountdown);

    // Tell user the timeout has been stopped
    $(".dots").append("STOPPED");

  }

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<p>You need to click within this iframe for the escape keypress to be registered.</p>
<div class="dots"></div>

答案 1 :(得分:1)

您不能那样做。如果将主UI线程与无限循环绑定在一起,则该线程无法处理其任务队列中的任务。事件(例如按键)作为任务在任务队列中传递。

分别:on 注册事件处理程序。您只需<一次>注册处理程序即可。

如果在处理事件的同时还需要“循环”,则需要设置一系列异步操作(setTimeoutsetInterval,...)。