• ベストアンサー

2つのコンボボックスの連携

以前このカテゴリで「一方のコンボボックスの選択によりもう一方のコンボボックスの項目を絞り込む」スクリプトを拝見させていただいたのですが、次のとおり作成すると「な行」を選択すると「え」と「な」が選択項目として現れてしまいます。 どこかおかしいところがあるのでしょうがさっぱりわかりません。どなたか教えてください。よろしくお願いします。 ------------------------------------------------ <html> <head> <title>OK WEB</title> <script type="text/javascript"> <!-- txt = {}; txt["1"] = new Array("あ","い","う","え","お"); txt["2"] = new Array("か","き","く","け","こ"); txt["3"] = new Array("さ","し","す","せ","そ"); txt["4"] = new Array("た","ち","つ","て","と"); txt["5"] = new Array("な"); function initMenu(){ var i; for (i=0; i<txt["1"].length; i++){ document.FORM1.MENUB.options[i] = new Option(txt["1"][i],txt["1"][i]); } } function setSubMenu(area){ var i; for (i=0; i<document.FORM1.MENUB.length; i++){ document.FORM1.MENUB.options[i] = null; } for (i=0; i<txt[area].length; i++){ document.FORM1.MENUB.options[i] = new Option(txt[area][i],txt[area][i]); } } // --> </script> </head> <body onload="initMenu()"> <form name="FORM1"> <select name="MENUA" onchange="setSubMenu(this.value)"> <OPTION VALUE="1">あ行 <OPTION VALUE="2">か行 <OPTION VALUE="3">さ行 <OPTION VALUE="4">た行 <OPTION VALUE="5">な行 </select> <br> <select name="MENUB" > <OPTION VALUE="あ">-- </select> </form> </body> </html>

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは、length属性の値とOptions配列のサイズに不整合が起きているのかなと思います。なんでそうなのかは不明ですが、、、 setSubMenu関数の内容を以下のように変えてみました。 // 変数名が長いので、別変数で参照します。 var targetOptions = document.FORM1.MENUB.options; // 現在のサイズより今の選択項目配列サイズが多ければ縮小。 if (txt[area].length < targetOptions.length) {  targetOptions.length = txt[area].length; } // 選択項目配列に値をつけなおします。 var i = 0; for (i=0; i<txt[area].length; i++){  targetOptions[i] = new Option(txt[area][i], txt[area][i]); }

akomot
質問者

お礼

ありがとうございます。早速使わせていただいてよろしいでしょうか? 配列の大きさを小さくするというのは思いつきませんでした。本当にありがとうございました。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

for (i=0; i<document.FORM1.MENUB.length; i++){ を for (i=document.FORM1.MENUB.length-1; i>=0; i--){ に変更して下さい。

akomot
質問者

お礼

ありがとうございます。 教えていただいたとおりやってみたのですがやっぱりうまくいきません。もう少し研究してみます。

関連するQ&A