我需要在一段时间内将一个类添加到span元素中。
jQuery('.rating').each(function(){
var datarating = $(this).attr("rating");
for(var i=0; i<datarating; i++){
(function (i) {
setTimeout(function () {
rating(this, i);
}, 1000, i);
})(i);
}
});
function rating(obj, i){
$(obj).find('span').eq(i).addClass('rated');
}
HTML:
<div class="rating" rating="2">
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
<div class="rating" rating="3">
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
我做错了什么。我无法在循环中调用setTimeout函数在脚本结尾处,结果必须是。
<div class="rating" rating="2">
<span class="rated"></span>
<span class="rated"></span>
<span></span>
<span></span>
<span></span>
</div>
<div class="rating" rating="3">
<span class="rated"></span>
<span class="rated"></span>
<span class="rated"></span>
<span></span>
<span></span>
</div>
答案 0 :(得分:0)
问题是,this
在setTimeout的范围内不存在。你应该存储全局引用,然后在里面使用它。试试这个:
Variables.obj = this;
Variables.ResizeTimer = setTimeout(
function(){
rating(Variables.obj, i);
},
1000
);
答案 1 :(得分:0)
我猜想“这个”与窗口绑定是你的问题。
在这种情况下你最好使用旧的那个=这个技巧来引用正确的这个并用它来调用评级函数。
从你的例子中不清楚为什么你需要超时?
答案 2 :(得分:0)
试试这个
jQuery('.rating').each(function(){
var rating = this;
var datarating = $(this).attr("rating");
var i = 0;
var interval = setInterval(function () {
if ( i < datarating ) {
rating(rating, i);
i++;
} else {
clearInterval(interval);
}
}, 1000, i);
});