2011-01-27 73 views
1

在我的JavaScript代碼中,我試圖列出Select的選項(及其值)。這裏有一小段代碼(我使用的YUI2庫...日誌聲明只是把文字記錄儀):列出Select的選項在FF和IE中給出了不同的結果

for (var opt in mySelect.options) 
{ 
    YAHOO.log('my opt, val: ' + opt + ', ' + mySelect.options[opt].value); 
} 

在Firefox中,我得到以下(正確)輸出:

my opt, val: 0, 2 
my opt, val: 1, 1 
my opt, val: 2, 3 
my opt, val: 3, 4 
my opt, val: 4, 0 

但在Internet Explorer 7,我得到:

my opt, val: language, undefined 
my opt, val: scrollHeight, undefined 
my opt, val: isTextEdit, undefined 
my opt, val: currentStyle, undefined 
my opt, val: document, undefined 

我有點吃驚,至少可以說。我甚至嘗試過(var opt in(mySelect.options)),我改變了變量opt的名字以防萬一。沒有什麼改變。

如果我像這樣的代碼迴路:

for (var idx=0; idx< mySelect.options.length; idx++) 
{ 
    YAHOO.log('my idx, val: ' + idx + ', ' + mySelect.options[idx].value); 
} 

那麼IE正常工作爲好。

爲什麼第一種方式不起作用?我認爲for/in循環與for循環的工作方式相同。

感謝,

保羅

回答

5

for/in循環遍歷對象中的每個屬性。
您沒有在Firefox中看到這些屬性,因爲它們被標記爲[DontEnum]

您應該使用普通的for循環來遍歷數組。
對於普通陣列,如果!obj.hasOwnProperty(key)跳過鍵,則可以跳過for/in循環,但我不確定這是否適用於DOM對象。

+0

謝謝你的回答。我絕對誤解了作品中的/如何以及數組的陷阱。我做了更多的研究,發現我的問題已經在這裏得到解答 - 我只是不知道尋找它的正確方法!這就是答案: http://stackoverflow.com/questions/500504/javascript-for-in-with-arrays 再次感謝您的幫助...現在要改變我的代碼! – Paul 2011-01-27 20:52:34

相關問題