首页 > 解决方案 > 让 Javascript 中只存在同一个函数的一个实例

问题描述

li在 a 中的项目上有这个 onclick 事件侦听ul器,它启动一个 setInterval 函数,问题是如果我单击第二个li项目,则相同间隔函数的另一个实例启动并且前一个实例继续运行。我怎样才能“删除”前一个,只让最后一个“存在”?

我为类似问题找到的解决方案对我不起作用。

这是代码:

document.addEventListener('click', function (event) {

  var texta = document.getElementById('myTextarea');

   var item = event.target.closest('#yourlists li');
   if (item) {
    var ite = event.target.closest('#yourlists li').innerHTML;

    setInterval(function autoSave(){
          var listText = texta.value.split('\n');
          localStorage.setItem(ite, JSON.stringify(listText));
    }, 5000);

   }
});

标签: javascriptfunctionrecurrence

解决方案


setInterval()返回一个 ID,您可以稍后使用它来停止它...

var intervalId = 0;

document.addEventListener('click', function (event) {

    var texta = document.getElementById('myTextarea');

    var item = event.target.closest('#yourlists li');

    if (item) {
        var ite = event.target.closest('#yourlists li').innerHTML;

        // clear any existing interval handler
        clearInterval(intervalId);

        // create a new one
        intervalId = setInterval(function autoSave(){
            var listText = texta.value.split('\n');
            localStorage.setItem(ite, JSON.stringify(listText));
        }, 5000);
    }
});

推荐阅读