我无法理解。在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>
感谢您的回答。
答案 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)
从文档中获取该函数以使其正常工作