为什么setInterval不能被clearInterval停止

阿伦·卡纳瓦特(Arun Karnawat)
var progressbar = {
    progress : null,
    html : function() {
        var loadingHtml = '<div id="loader-wrapper" class="catalog-loadmore">';
        loadingHtml += '<div class="progress"><div id="catalog-bar" class="progress-bar progress-bar-striped active" style="width: 10%"></div></div>';
        loadingHtml += '<div class=""><span id="progress-valuenow"></span>%</div>';
        loadingHtml += '</div>';
        return loadingHtml
    },
    start : function() {
        var width = 10;
        this.progress = setInterval(function() {
            $('#catalog-bar').css('width', width + '%');
            $('#progress-valuenow').text(width);
            if(width < 98){
                width += 1;
            }else{
                this.stop(); // this is not working
                clearInterval(this.progress); // this is also not working
                console.log('else')
            }
        }, 100);
    },
    stop : function() {
        clearInterval(this.progress);
    },
    destroy : function() {
        clearInterval(this.progress);
        $('#loader-wrapper').remove();

    }
}

在上面的代码中,为什么下面的语句不起作用,否则执行else条件console.log('else')是打印但clearInterval()不起作用。我从外面打电话给progressbar.destroy(),它正在工作。

this.stop(); // this is not working
clearInterval(this.progress); // this is also not working

谁能告诉我我做错了什么。

鲁道夫·格罗林(Rudolf Groehling)

您已经将匿名函数传入了setInterval,匿名函数的上下文已this设置为window,因此您的目标是window.progress

您有两种方法可以解决问题:

  • 存储this在一些变量中 var _this = this; setInterval(function() { ... clearInterval(_this.progress) } ...)

  • 用于Function.prototype.bind()设置匿名函数的上下文,例如 setInterval(function() { ... clearInterval(this.progress) }.bind(this) ...)


或为ES6设置transpiler并使用自动Arrow function绑定this

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

反应为什么我的clearInterval无法停止setInterval?

来自分类Dev

为什么 clearInterval() 不能正常工作?

来自分类Dev

为什么我无法控制 setinterval 和 clearinterval javascript?

来自分类Dev

无法使用clearInterval停止setInterval

来自分类Dev

为什么setInterval函数不能正常工作?

来自分类Dev

clearInterval停止setInterval完全基于时间工作

来自分类Dev

每次单击如何停止(clearInterval)setInterval

来自分类Dev

clearInterval()不会停止setInterval()javascript

来自分类Dev

nodejs-为什么setInterval突然停止工作?

来自分类Dev

停止setInterval只能运行一次,为什么?

来自分类Dev

为什么clearInterval()函数没有停止JavaScript计时器?

来自分类Dev

Javascript clearInterval()无法正常工作,如何停止setInterval()?

来自分类Dev

停止使用clearInterval()在setInterval()内部声明的函数

来自分类Dev

为什么在PHP函数上“返回”不能停止进程?

来自分类Dev

为什么不能停止vsftpd服务器?

来自分类Dev

为什么我不能停止计时器

来自分类Dev

为什么中断顺序不能停止我的代码中的循环?

来自分类Dev

setInterval和clearInterval的Ember实现是什么

来自分类Dev

为什么我不能将javascript setInterval与外部文件中的函数一起使用?

来自分类Dev

setInterval中的setState不能按预期工作。知道为什么吗?

来自分类Dev

为什么我不能在settimeout / setinterval中多次调用带有参数的函数

来自分类Dev

为什么在回调中取消蓝鸟答应会停止setInterval?

来自分类Dev

clearInterval不清除setInterval

来自分类Dev

jQuery setInterval和clearInterval

来自分类Dev

setInterval / clearInterval问题

来自分类Dev

jQuery setInterval和clearInterval

来自分类Dev

为什么请求停止?

来自分类Dev

如何使用setInterval和clearInterval在javascript中十秒后停止计时器?

来自分类Dev

clearInterval不停止由setInterval启动具有velocity.js标注脉冲的函数

Related 相关文章

  1. 1

    反应为什么我的clearInterval无法停止setInterval?

  2. 2

    为什么 clearInterval() 不能正常工作?

  3. 3

    为什么我无法控制 setinterval 和 clearinterval javascript?

  4. 4

    无法使用clearInterval停止setInterval

  5. 5

    为什么setInterval函数不能正常工作?

  6. 6

    clearInterval停止setInterval完全基于时间工作

  7. 7

    每次单击如何停止(clearInterval)setInterval

  8. 8

    clearInterval()不会停止setInterval()javascript

  9. 9

    nodejs-为什么setInterval突然停止工作?

  10. 10

    停止setInterval只能运行一次,为什么?

  11. 11

    为什么clearInterval()函数没有停止JavaScript计时器?

  12. 12

    Javascript clearInterval()无法正常工作,如何停止setInterval()?

  13. 13

    停止使用clearInterval()在setInterval()内部声明的函数

  14. 14

    为什么在PHP函数上“返回”不能停止进程?

  15. 15

    为什么不能停止vsftpd服务器?

  16. 16

    为什么我不能停止计时器

  17. 17

    为什么中断顺序不能停止我的代码中的循环?

  18. 18

    setInterval和clearInterval的Ember实现是什么

  19. 19

    为什么我不能将javascript setInterval与外部文件中的函数一起使用?

  20. 20

    setInterval中的setState不能按预期工作。知道为什么吗?

  21. 21

    为什么我不能在settimeout / setinterval中多次调用带有参数的函数

  22. 22

    为什么在回调中取消蓝鸟答应会停止setInterval?

  23. 23

    clearInterval不清除setInterval

  24. 24

    jQuery setInterval和clearInterval

  25. 25

    setInterval / clearInterval问题

  26. 26

    jQuery setInterval和clearInterval

  27. 27

    为什么请求停止?

  28. 28

    如何使用setInterval和clearInterval在javascript中十秒后停止计时器?

  29. 29

    clearInterval不停止由setInterval启动具有velocity.js标注脉冲的函数

热门标签

归档