.eq()参数不在循环中工作

时间:2016-04-05 16:26:14

标签: javascript jquery

我有以下功能:

function createLogos() {
    for (var l=0; l<userList().length; l++) {
        var username = "https://api.twitch.tv/kraken/users/" + userList()[l];
        $.getJSON(username, function(data) {
            $(":eq(l)").append("<img src=" + data.logo +">");
        });
     }
 }

但是,eq(l)无法识别l是什么。用数字代替它,它就像我希望的那样。

任何人都可以理解为什么它可能会像这样吗?

3 个答案:

答案 0 :(得分:1)

您可以将$.map()替换为for循环,使用$.when()

function createLogos() {
    $.when.apply($, $.map(userList(), function(el, index) {
      var username = "https://api.twitch.tv/kraken/users/" + el;
      return $.getJSON(username, function(data) {
        $("#theTable .pic").eq(index).append("<img src=" + data.logo +">");
      })
    }))
 }

答案 1 :(得分:0)

在您的代码中,您正在寻找索引l而不是循环的当前索引。现在id你是通过引用变量来做的,你将遇到一个不同的问题,因为当代码被命中时我将被评估,因此它将是错误的值。

所以你需要的是在JSON调用之前引用该元素

function createLogos() {
    for (var l=0; l<userList().length; l++){
        var username = "https://api.twitch.tv/kraken/users/" + userList()[l],
            pic = $("#theTable .pic").eq(l);
        $.getJSON(username, function(data){
            pic.append("<img src=" + data.logo +">");
        });
     }
 }

答案 2 :(得分:0)

尝试连接function createLogos() { for (var l=0; l<userList().length; l++){ var username = "https://api.twitch.tv/kraken/users/" + userList()[l]; $.getJSON(username, function(data){ $(":eq("+l+")").append("<img src=" + data.logo +">"); }) } }
希望它能起作用

angular.module('AddressBook', []);  

angular.module('AddressBook').controller('PeopleController', PeopleController);
function PeopleController($scope) {
     "use strict";
     $scope.people = [
          {name: "Dani Moss", phone: "1234567890", city: "Richmond"},
          {name: "Sarah Parker", phone: "1236548769", city: "Chicago"},
          {name: "Little John", phone: "4567853432", city: "Los Angeles"},
          {name: "Adam Doe", phone: "9025673152", city: "Las Vegas"}
     ];
}