2011-01-27 6 views
1

私のJavaScriptコードでは、Selectのオプション(とその値)を一覧表示しようとしています。ここでは、コードのスニペットがあります(私はYUI2ライブラリを使用しています...ログ文がちょうどロガーにテキストを置く):FirefoxのでSelectのオプションをリストするとFFとIEで異なる結果が出る

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

を私は次の(正しい)出力を得る:

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

関連する問題