2011-08-03 55 views
0

我在下面描述的加载函数有问题。由于某些原因,即使我每次都传递一个不同的参数(我已经用console.log(display)检查过),它似乎返回相同的jQuery对象。jQuery在for循环中重复返回相同的元素

我不确定是否有其他信息可以提供,但请告诉我,我会看看我能做些什么。

// ... 

function image(path, fn) { 
    $(new Image()).load(function() { 
     if (typeof fn === 'function') { 
      fn($(this)); 
     } 
    }) 
    .error(function() { 
     console.error('Unable to load image: ' + imgBasePath + path); 
    }) 
    .attr('src', imgBasePath + path); 
} 

function load(p, info, fn) { 
    display = info || { 
     Username : p.username, 
     Lives : p.location, 
     Supports : p.team, 
     Level : p.level 
    }; 

    image(p.avatar, function(img) { 
     var detail = $('<div></div>', { 
      class: 'player_details' 
     }); 

     for (name in display) { 
      detail.append($('<div>').html(name + ': ' + display[name])); 
     } 
     if (typeof fn === 'function') { 
      fn(img, detail); 
     } 
    }); 
} 

// ... 

$.each(players, function(i, p) { 
    var id, elem; 
    id = (player.sessionid === p.sessionid) ? 'me' : null; 
    elem = $('<div />', { 
     class: 'player clearfix', 
     target: p.sessionid, 
     id: id 
    }); 
    load(p, {Username: p.username, Level: p.level}, function(img, details) { 
     img.appendTo(elem); 
     details.appendTo(elem); 
    }); 
    elements.progress.append(elem); 
}); 

// ... 

回答

0

我找到了答案。 display = info || {...在全球范围内,因为我没有用var加上它,把它改为var display = info || {...修复了这个问题。

http://jsfiddle.net/tqKhA/8