Jquery 在循环中调用setTimeout函数不起作用

Jquery 在循环中调用setTimeout函数不起作用,jquery,Jquery,我需要在一段时间内将类添加到一个跨度元素中 jQuery('.rating').each(function(){ var datarating = $(this).attr("rating"); for(var i=0; i<datarating; i++){ (function (i) { setTimeout(function () { rating(this, i);

我需要在一段时间内将类添加到一个跨度元素中

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');
}   
jQuery('.rating')。每个(函数(){
var datarating=$(此).attr(“评级”);

对于(var i=0;i问题是,
不在setTimeout范围内。您应该存储全局引用,然后在内部使用它。请尝试以下操作:

 Variables.obj = this;
 Variables.ResizeTimer = setTimeout(
     function(){
        rating(Variables.obj, i);
     },
     1000
 );
我猜“这”一定是你们的问题

在这种情况下,您最好使用旧的that=this技巧来引用正确的this并用它调用评级函数

从您的示例中也不清楚为什么需要超时?

试试这个

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);
}); 
jQuery('.rating')。每个(函数(){
var评级=此;
var datarating=$(此).attr(“评级”);
var i=0;
var interval=setInterval(函数(){
如果(i
抱歉,这是一个建议的编辑,我认为这可能是一个问题,但我想不是!
 Variables.obj = this;
 Variables.ResizeTimer = setTimeout(
     function(){
        rating(Variables.obj, i);
     },
     1000
 );
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);
});