0

我无法理解。在 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

4 回答 4

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);
});
于 2013-11-10T07:20:26.497 回答
1

This is an issue:

  setTimeout(banner_change(this), 5000);

You're actually calling banner_change here - try

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

The call you were originally doing was executing banner_change immediately and passing the return value to setTimeout

于 2013-11-10T07:19:16.247 回答
0

you need to pass function reference not function invocation result.

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

$.proxy wrapper for the function reference will ensure your function is invoked with the "this" context.

于 2013-11-10T07:19:38.013 回答
0

准备好文档中的功能以使其正常工作

于 2013-11-10T07:37:15.670 回答