2009-08-26 17 views
0

私は以下のコードを持っています - ユーザーがドロップされたデフォルトオプションだけをクリックしたときにドロップダウンをロードするために使用されます。このドロップダウンはかなり大きく、IEは 'そんなに好きではない。ここでは、コードは次のようになります。IE 6 Javascriptの選択ドロップダウンの問題

function populateDropDown(id, code) { 
    var currentSelect = document.getElementById(id); 
    <%--Don't enable the dropdown if it has more than one entry already - assume this to be populated.--%> 
    if(currentSelect.length == 1) { 
      currentSelect.remove(0); 
      var selectedIndex = 0; 
      for(var index = 0; index < codes.length; index++) { 
        var newOption = document.createElement('option'); 
        newOption.value = codes[index]; 
        newOption.text = values[index]; 
        try { 
          currentSelect.add(newOption, null); // standards compliant 
        } 
        catch(ex) 
        { 
          currentSelect.add(newOption); // IE only 
        } 
        if(codes[index] == code) { 
          selectedIndex = index; 
        } 
      } 
      currentSelect.selectedIndex = selectedIndex; 
    } 
} 

このコードは、オペラ9.xの、IE 7で動作します - ではなく、私はオペラトンボが好きなので、IE 6は、(私はOperaでテストする - しかし、それは本当に唯一のIE 7で動作するように持っていると6)。

IE 6では、コードはドロップダウンに値を設定しますが、選択した値をドロップダウンリストの最初の値に設定します。選択した値は、他の2つのブラウザーで適切な値に設定されます。

私はJavascriptの専門家ではありません。誰かがIE 6でこれをやっている理由とそれを回避する方法を知っていれば、それは感謝します。 コメントにはJSPコメントがあります.Javascriptがブラウザに送信される前に削除されます(無効なコメントではありません)。

+0

if(code [index] == code)はどこから来ますか? –

+0

申し訳ありません、Russさん、署名を追加するのを忘れてしまいました。署名はfunctionName(id、code)です。コードは、JSP EL関数を介して、最初に選択された値から来ています(なぜ、このチェックは、すでに入力されているドロップダウンには挿入されません - そのドロップダウンに2つ以上のオプションがない場合、 !) – MetroidFan2002

+0

署名を追加するために編集します。 – MetroidFan2002

答えて

1

これまで私はこの正確な問題を抱えてきました。ドキュメントにフォーカスが戻される前にselect要素の動的に作成された子要素にアクセスしようとすると、selectedIndexの設定は失敗し、デフォルトの最初の項目になります。

修正を見つけた記事を見つけたら投稿します。調整してください!

UPDATE:それを見つけた

!代わりに<select>要素にselectedIndexを設定する

、あなたが望む<option>要素を検索し、設定された属性をtrueに「選択」:

var currentSelect = document.getElementById(id); 
if(currentSelect.length == 1) { 
     currentSelect.remove(0); 
     var selectedIndex = 0; 
     for(var index = 0; index < codes.length; index++) { 
       var newOption = document.createElement('option'); 
       newOption.value = codes[index]; 
       newOption.text = values[index]; 
       try { 
         currentSelect.add(newOption, null); // standards compliant 
       } 
       catch(ex) 
       { 
         currentSelect.add(newOption); // IE only 
       } 
       if(codes[index] == code) { 
         selectedIndex = index; 
       } 
     } 
     // currentSelect.selectedIndex = selectedIndex; 
     // Try this: 
     currentSelect.options[selectedIndex].setAttribute('selected', true); 
} 
+0

ちょっとコリー - 面白いです。私は明日に入るとすぐにそれを試してみるでしょうし、それがうまくいくなら(私はそれが願っています)あなたの答えを受け入れます。それまでは、upv​​oteで返済する必要があります:) – MetroidFan2002

+0

問題はありません。私はこの同じ正確な問題に遭遇しましたが、jQueryを使用していました。 IE7、IE8、およびFF2 +ではすべてが期待通りに機能しましたが、IE6では失敗していました。実際の記事は次のとおりです:http://brh.numbera.com/experiments/browserdemos/ie6-adding-options.html –

+0

私はあなたの答えを受け入れていますが、私は自分自身を追加しています。私。 – MetroidFan2002

0

コーリーのコメントは、私を助けたが、彼のコードが生成されませんでした私はIE6の下で望んでいた結果でした。しかし、彼はフォーカスが問題かもしれないと指摘しました。次のスニペットは、IE 6で適切に選択します。ドロップダウンをロードしてから選択するため、本当に奇妙に見えますが、機能は必要なものであり、読み込む静的なHTMLよりも高速です。

currentSelect.focus(); 
currentSelect.selectedIndex = selectedIndex; 

その後、選択されたインデックスを設定し、入力を中心に、IE 6で動作します - ドロップダウンが本当に速い第一の入力にジャンプして、ジャンプして戻るが。しかし、それが動作している限り...

+0

これを試してみてください: 'currentSelect 'の代わりに。'selectedIndex'を設定する前に、' setTimeout(function(){currentSelect.selectedIndex = selectedIndex;}、0); ' –

関連する問題