JavaScript setTimeout 不起作用

标签 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>

感谢您的回答。

最佳答案

几个问题、语法和范围

当使用 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);
});

关于JavaScript setTimeout 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19887228/

相关文章:

windows-8 - 我可以在我的网络应用程序中使用 windows 8 字体(Segoe UI)吗?

javascript - jQuery 拖放以显示隐藏的单元格

javascript - 如何限制幻灯片的大小 (JS)

javascript - 纯Javascript super 简单的幻灯片图像数量计数器?

javascript - jquery deferred.done : passing a data array to done method

javascript - 使用 jQuery 返回隐藏的 <td> 值

node.js - 来源显得神秘

javascript - ASP.NET MVC 路由 - domain.com/Events#!/12 到 domain.com/Events/12

javascript - 更改 google-chrome 扩展程序中 popup.html 的大小

javascript - 从数组获取列表中项目的索引