jquery clearInterval()似乎未按预期工作

6yt4nkrj  于 2022-12-18  发布在  jQuery
关注(0)|答案(1)|浏览(310)

我正在开发一个JavaScript/WebRTC对讲机应用程序,需要按住一个按钮来发送音频。它工作正常,直到我按住鼠标左键单击鼠标右键,导致setInterval函数继续工作,clearInterval无法通过其ID停止它。它只是永远继续下去。根据我所读到的一切,clearInterval应该停止它,尤其是在全局设置间隔的情况下。

var intervalId;

$("#transmitbutton").on("mousedown touchstart", function () {
    intervalId = setInterval(function () {
        console.log("PTT pressed");
    }, 1000);
});

$("#transmitcontainer").on("mouseup touchend mouseleave", function () {
    clearInterval(intervalId);
});

我试过开始和停止按钮,结果是一样的。clearInterval不工作。

var intervalId;

$("#transmitstart").on("click", function () {
    intervalId = setInterval(function () {
        console.log("PTT pressed");
    }, 1000);
});

$("#transmitstop").on("click", function () {
    clearInterval(intervalId);
});
olhwl3o2

olhwl3o21#

如果您碰巧调用了多次创建它的函数,那么您将拥有一个不可取消的间隔,因为您将覆盖间隔ID。因此,您要么需要取消它,要么不创建新的间隔。

var intervalId;

$("#transmitbutton").on('mousedown touchstart', function() {
  if (intervalId) return; // either exit out and not create a new one
  // if (intervalId) clearInterval(intervalId);  //or remove it here
  intervalId = setInterval(function(){
    console.log("PTT pressed");
  }, 1000);
});

$("#transmitcontainer").on('mouseup touchend mouseleave', function() {
  if (intervalId) clearInterval(intervalId);
  intervalId = null;
});

相关问题