2013-06-04 79 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循環的那個之外我可以訪問是爲通過portArrays變量該函數的一個參數。但是,我不能訪問$.each循環內的相同變量。

我做錯了什麼?我怎樣才能獲得循環內的變量?

UPDATE:其中portArrays實際被訪問

+7

您的代碼不顯示錯誤情況。你沒有訪問每個循環內部的portOptions,那麼我們怎麼能說你的代碼有什麼問題? –

+4

有沒有理由portArrays不會在每個循環內訪問 –

+1

我已經添加了一些代碼訪問portArrays。我會看看我是否可以在jsfiddle中重新創建我的問題 – dchapman

回答

0

portArrays添加的代碼是你正在使用它定義,但你使用了錯誤的指標。變量sideportOptions的索引,而不是portArrays

它應該有什麼指數?如果這兩個數組以相同的索引值並行運行,那通常是一個壞主意 - 最好使用單個數組對象 - 並且至少需要在代碼中記錄。

順便說一句,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 
    } 
}