2013-06-04 4 views
0

Вот функция, которая находится в одном из моих объектов:не удается получить доступ к переменной внутри jQuery.each

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 I может доступа по portArrays переменная, которая передается как аргумент в функцию. Однако I не может получить доступ к той же переменной внутри цикла $.each.

Я что-то не так? Как я могу получить доступ к этой переменной внутри цикла?

UPDATE: Добавлен код, где portArrays фактически осуществляется доступ

+7

В вашем коде не отображается ошибка. Вы не получаете доступ к portOptions внутри каждого цикла, так как мы можем сказать, что не так с вашим кодом? –

+4

нет причин, по которым portArrays не будет доступен внутри каждого цикла –

+1

Я добавил некоторый код доступа к portArrays. Я посмотрю, смогу ли я воссоздать свою проблему в jsfiddle. – dchapman

ответ

0

portArraysявляется определено, где вы его используете, но вы используете неправильный индекс. Переменная side - это индекс в portOptions, а не portArrays.

Какой индекс должен иметь? Если эти два массива работают параллельно с одинаковыми значениями индекса, это, как правило, плохая идея - лучше использовать один массив объектов и, по крайней мере, нужно документировать в вашем коде.

BTW, какое именно сообщение об ошибке в консоли JS? Если мое предположение неверно, сообщение об ошибке даст ключ.

+0

После перезаписи кода в jsfiddle все работает нормально. Не уверен, что происходит. – dchapman

0

У меня была проблема, описанная в теме, однако, похоже, у айзера была проблема в другом месте его кода. Мой код похож на приведенный ниже, и я не смог получить доступ к тому, что я хотел от this. Первый журнал будет работать, но журнал внутри каждого цикла не определен. Теперь я понимаю, что this переназначен при использовании JQuery каждый - 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 
    } 
} 
Смежные вопросы