JavaScript setTimeout不起作用

时间:2013-11-10 07:14:54

标签: javascript jquery web timer settimeout

我无法理解。在Chrome调试器中它可以正常工作,但是当我将其关闭并刷新页面时,我的div很清楚。

<script type="text/javascript">
  $(document).ready(function() {
    function banner_change(span) {
      if ($(span).hasClass('show')) {
        $(span).removeClass('show');
      }
    }

    $('div#spec_banner span').each(function () { 
      if (!$(this).hasClass('show')) {
        $(this).addClass('show')
      }
      setTimeout(banner_change(this), 5000);
    });
  });
</script>

感谢您的回答。

4 个答案:

答案 0 :(得分:3)

几个问题,语法和范围

在没有匿名函数的情况下使用setTimeout时,语法为:

setTimeout(banner_change, 5000); /* no () */

传递参数需要做:

setTimeout(function(){
      banner_change(this);
}, 5000);

但是,回到范围,this已经丢失了setTimeout中的上下文(现在可能是window)所以需要在setTimeout之外分配变量

$('div#spec_banner span').each(function () { 
  if (!$(this).hasClass('show')) {
    $(this).addClass('show')
  }
    var span =this
  setTimeout(function(){
      banner_change(span);
  }, 5000);
});

答案 1 :(得分:1)

这是一个问题:

  setTimeout(banner_change(this), 5000);

你实际上在这里调用banner_change - 试试

  setTimeout(function(){
      banner_change('div#spec_banner span');
  }, 5000);

您最初进行的调用是立即执行banner_change并将返回值传递给setTimeout

答案 2 :(得分:0)

你需要传递函数引用而不是函数调用结果。

setTimeout( $.proxy(banner_change, this), 5000);

$。函数引用的代理包装器将确保使用“this”上下文调用您的函数。

答案 3 :(得分:0)

从文档中获取该函数以使其正常工作