无法访问jQuery.each中的变量

时间:2013-06-04 19:17:58

标签: javascript jquery

这是我的一个对象中的一个函数:

updatePorts: function(nodeKey, portOptions, portArrays) {
  var showing_ports = false;
  $('#ports li').removeClass('active').hide();
  $('#ports .tab-pane').removeClass('active in');
  $.each(portOptions, function(side, options) {
    if (options.editable) {
      $('#ports [href="#'+side+'"]').closest('li').show();
      if (!showing_ports) {
        $('#ports [href="#'+side+'"]').closest('li').addClass('active');
        $('#ports #'+side).addClass('active in');
      }

      $.each(portArrays[side], function(i,port) {
        //do stuff
      }

      showing_ports = true;
    }
  })
}

我的问题是在$.each循环之外我可以访问作为参数传递给函数的portArrays变量。但是,我无法访问$.each循环内的同一个变量。

我做错了吗?如何在循环内访问该变量?

更新:添加了实际访问portArrays的代码

2 个答案:

答案 0 :(得分:0)

您正在使用

portArrays ,但您正在使用错误的索引。 side变量是portOptions的索引,而不是portArrays

它应该有什么指数?如果这两个数组并行运行相同的索引值,那通常是个坏主意 - 最好使用单个对象数组 - 至少需要在代码中记录。

BTW,JS控制台中的确切错误信息是什么?如果我的猜测不正确,错误信息将提供线索。

答案 1 :(得分:0)

我遇到了主题中描述的问题,但似乎提问者在其代码的其他地方遇到了问题。我的代码与下面的代码类似,我无法从this访问我想要的内容。第一个日志可以工作,但每个循环内的日志都是未定义的。我现在意识到,每次使用jquery时都会重新分配this - http://api.jquery.com/each/

List.prototype.updateList = function(search) {
    console.log(this.id);
    $.each(this.data, function(item, tags) {
        console.log(this.id); //undefined
    };
}

我已更改为使用for .. in来迭代我的this.data对象并且它正常工作。希望这可以帮助别人。

List.prototype.updateList = function(search) {
    console.log(this.id);
    for(var key in this.data){
        console.log(this.id); //hooray
    }
}