2011-08-03 38 views
0

以下のロード関数に問題があります。何らかの理由で、毎回別のパラメータを渡しても(私はconsole.log(display)でこれをチェックしました)、同じjQueryオブジェクトを返すようです。forループ内で同じ要素を繰り返し返すjQuery

私が提供できる情報が他にあるかどうかはわかりませんが、私に知らせてください。

// ... 

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

関連する問題