代码之家  ›  专栏  ›  技术社区  ›  m4tt

只允许在JavaScript中存在同一函数的一个实例

  •  0
  • m4tt  · 技术社区  · 6 年前

    我打开了这个onclick事件侦听器 li ul ,这将启动一个setInterval函数,问题是如果我单击第二个 我如何“删除”前一个,只让最后一个“存在”?

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

    代码如下:

    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);
    
       }
    });
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Nikhil Aggarwal    6 年前

    使用 clearInterval . 从文档中,

    WORKOWWorkWorkGoalScVixMyIn的CuffTrimeValk()方法取消了通过调用SET TIALVAL()建立的定时重复动作。

    var myInterval;
    
    document.addEventListener('click', function (event) {
         // ... code
        clearInterval(myInterval);
        myInterval = setInterval(function autoSave(){
          // ... code
        }, 5000);
        // ... code
    });
    
        2
  •  1
  •   Reinstate Monica Cellio    6 年前

    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);
        }
    });
    
        3
  •  1
  •   Titus    6 年前

    这个 setInterval 函数返回可用于停止该间隔的ID。

    下面是一个例子:

    var intervalID
    document.addEventListener('click', function (event) {
        ....
        clearInterval(intervalID)
        intervalID = setInterval(function autoSave(){
             ....
        }, 5000);
        ....
    })