【问题标题】:jquery for loop issuejquery for 循环问题
【发布时间】:2011-12-27 04:47:44
【问题描述】:

我有一个下面的函数,我试图通过它附加一些东西。它在内部调用另一个执行附加功能的函数..

function something()
    for(var i=0; i <= obj.result.length; i++) {

编辑

    obj = objEval.result[i].uniquename;
    prop = objEval.result[i].prop;
    count = objEval.result[i].count;


        // count is 21 in my case. below function is called..
        if (count > 0){
            callAdd(obj,prop);
        }

    }
}

执行附加的实际函数

function callAdd(obj,prop){
    // obj exists in DOM.. checked via $(obj).length -- greater than 0
    $(obj).append(prop);
}

这里的问题是,即使 append 函数在 for 循环中.. 只有第一个元素被发送到 callAdd 函数.. 如下:

我有 4 个 obj,道具:

obj=45183371 and prop=6
obj=560488951 and prop=12
obj=616516330 and prop=23
obj=915329019 and prop=5

但只有第一对(obj=45183371 和 prop=6)作为参数发送到 callAdd 函数。

请帮忙..

【问题讨论】:

  • 如果你不使用迭代器i 有什么意义?您不需要在某处使用类似于obj[i] 的东西吗?
  • 需要检查的是您是否每次都将相同的 obj 和 prop 传递给 callAdd 函数。您能否粘贴执行调用(以及参数传递)的确切代码。这么多代码很难说清楚。
  • count 是全局变量吗?由于您的评论,我认为在这种情况下计数为 21。你有没有想过使用 JQuery 函数 .each() 而不是自己做 for 循环?
  • @Peter:我相信我正在尝试在循环内//做一些事情..当然它有事情要做!
  • @techfoobar : 不,每次在循环中,obj、prop 对都会更改.. 如控制台值所示.. 但是当传递给函数时,只有第一对被传递:(

标签: javascript jquery loops for-loop


【解决方案1】:

something() 通常需要添加一个参数,否则它将如何工作?它会在哪里建立它的循环?全局变量?我没有看到一个

【讨论】:

  • 某事有 2 个参数.. 它实际上是某事(param1, param2)
  • 是的,但你没有在你的代码中显示,人们不能只是猜测你的参数将是什么......编写你的完整代码以获得更好的效果/响应
【解决方案2】:

试试这个。 获取 Array 中的所有 obj。

var objAry=new Array();

获取数组中的所有道具。

var propsAry=new Array();

现在

    function something()
    {
        var propsAry=new Array();
        var objAry=new Array();

        objAry= //Your objs
        propsAry=//Your props

        for(var i=0; i <= objAry. length; i++)
        {

            if (count > 0)
            {
                callAdd(objAry[i], propsAry[i]);
            }
        }
  }

【讨论】:

    【解决方案3】:

    您正在更改您所依赖的变量 (obj) 以限制您的循环控制变量 (i)。当您在循环体内重新分配 obj 时:

    obj = objEval.result[i].uniquename;
    

    循环条件:

    i <= obj.result.length
    

    将在下一次迭代中为 false。在循环体中,创建一个新变量,而不是为 obj 分配新变量。

    或者(或另外),将您想要的迭代次数缓存在一个变量中:

    var len = obj.result.length;
    for (var i = 0; i <= len; i++) {
        // Do whatever you want to obj.
    }
    

    【讨论】:

      【解决方案4】:

      你没有定义count,所以使用i

      if (i > 0){
          callAdd(obj,prop);
      };
      

      【讨论】:

      • 我们需要看看函数的“做某事”部分
      • obj = objEval.result[i].uniquename; prop = objEval.result[i].likes;
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      相关资源
      最近更新 更多