首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clearInterval也没有像我预期的那样工作

clearInterval也没有像我预期的那样工作
EN

Stack Overflow用户
提问于 2014-07-17 15:07:52
回答 2查看 83关注 0票数 0

我制作了一个演示就在这里。您所要做的就是开始输入文本字段,确保您打开了控制台。因此,当您输入时,您将立即看到保存的OMG,控制台中的计数器将发疯。

现在单击该按钮,查看控制台,您将看到类似于11或其他值的东西,但您也会看到计数器重置,继续运行。我不想这样。我想让计数器停止,我已经点击了一个按钮,当页面没有刷新时,如果我理解setInterval(),计数器应该停止。

我正在开发的应用程序使用与此非常相似的代码,它不会像大多数单页应用程序那样刷新,所以我必须控制这个setInterval

所以我的问题是:

如何重置计数器,直到我再次键入输入框或如果找不到输入框元素,闪存消息就不会显示,间隔将设置为0.

更新

下面是在上面提供的链接上运行的JavaScript代码。

代码语言:javascript
复制
var ObjectClass = {
  
  initialize: function() {
    $('#flash-message').hide();
  },
  
  syncSave: function() {
    $('#content').keypress(function(){
      SomeOtherClass.autoSave = setInterval( function(){
        $('#flash-message').show();
        $('#flash-message').delay(1000).fadeOut('slow');
      }, 500);
    });
  },
  
  listenForClick: function() {
    $('#click-me').click(function() {
      console.log(SomeOtherClass.autoSave);
      clearInterval(SomeOtherClass.autoSave);
    });
    
  }
};

var SomeOtherClass = {
  autoSave: null
};

ObjectClass.initialize();
ObjectClass.syncSave();
ObjectClass.listenForClick();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-17 15:21:08

你得把这个

代码语言:javascript
复制
clearInterval(SomeOtherClass.autoSave); 

在这一行之前:

代码语言:javascript
复制
SomeOtherClass.autoSave = setInterval( function(){ 

这样,您就可以终止前一个间隔,同时只有一个时间间隔。

您的代码将是:

代码语言:javascript
复制
var ObjectClass = {

    initialize: function () {
        $('#flash-message').hide();
    },

    syncSave: function () {
        $('#content').keypress(function () {
            clearInterval(SomeOtherClass.autoSave);
            SomeOtherClass.autoSave = setInterval(function () {
                $('#flash-message').show();
                $('#flash-message').delay(1000).fadeOut('slow');
            }, 500);
        });
    },

    listenForClick: function () {
        $('#click-me').click(function () {
            console.log(SomeOtherClass.autoSave);
            clearInterval(SomeOtherClass.autoSave);
        });

    }
};

var SomeOtherClass = {
    autoSave: null
};

ObjectClass.initialize();
ObjectClass.syncSave();
ObjectClass.listenForClick();
票数 2
EN

Stack Overflow用户

发布于 2014-07-17 15:27:53

您需要做的是使用超时而不是间隔,如下所示:

代码语言:javascript
复制
var ObjectClass = {

  initialize: function() {
    $('#flash-message').hide();
  },

  syncSave: function() {
    $('#content').keypress(function(){
      SomeOtherClass.autoSave = setTimeout( function(){
        $('#flash-message').show();
        $('#flash-message').delay(1000).fadeOut('slow');
      }, 500);
    });
  },

  listenForClick: function() {
    $('#click-me').click(function() {
      console.log(SomeOtherClass.autoSave);
      if(typeof SomeOtherClass.autoSave === 'number'){
        clearTimeout(SomeOtherClass.autoSave);
        SomeOtherClass.autoSave = 0;
      }
    });

  }
};

var SomeOtherClass = {
  autoSave: 0
};

ObjectClass.initialize();
ObjectClass.syncSave();
ObjectClass.listenForClick();
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24807258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档