Writing /volume1/Web/Public/dokuwiki/data/log/deprecated/2024-11-13.log failed

set selectedIndex value for dynamic drop-down list

動的に作成されたselect objectのoptionを設定する方法を紹介する。
大まかに、動的にリストを作成する部分とoptionの値を設定する部分の二に分けて説明する。
今回の例ではjavascript libraryのdojo1)frameworkを利用した。
ちなみに、テストはInternet Explorer(以下IE)7,8とFireFox(以下FF)3で行われた。

まず、動的にoptionリストを作成する部分だが、コードの一部分を次に示す。

function createOpt(label, value){
   var opt=document.createElement('option');
   opt.appendChild(document.createTextNode(label));
   opt.setAttribute('value',value);
   return opt;
}

ここで、labelはoptionのテキストで、valueはoptionの値である。

次にoptionの値を設定する部分だが、ブラウザごとに実装が違うので確認する必要がある。 IE7とFF3だと次のコードが有効である。

function setVals(obj, value){
   for(var i=0; i<obj.options.length; i++){
      if(obj.options[i].value == value){
         obj.options[i].setAttribute("selected", "true");
         break;
      }
   }
}

ここで、objはselect object,valueは設定されるoptionの値である。 しかし、IE6だと場合によっては上記のコードが駄目になることがある。

確実な方法としてはdrop-downリストを作成する際に、値を設定することがある。 そのコードを次に示す。

function createOpt(label, value, val){
   var opt=document.createElement('option');
   opt.appendChild(document.createTextNode(label));
   opt.setAttribute('value',value);
   if(value==val) opt.setAttribute("selected", "true");
   return opt;
}

source code

今回のテストで使ったソースコードを次に示す。

<html>
<SCRIPT TYPE="text/javascript" SRC="http://o.aolcdn.com/dojo/1.3/dojo/dojo.xd.js"></SCRIPT>
<script type="text/javascript">
<!--
 
    dojo.addOnLoad(function(){
       init();
       setVals(dojo.byId("kind"), "h");
 
});
 
function createOpt(label, value){
   var opt=document.createElement('option');
   opt.appendChild(document.createTextNode(label));
   opt.setAttribute('value',value);
   return opt;
}
 
function init(){
   dojo.byId("kind").innerHTML = "";
   dojo.byId("kind").appendChild(createOpt("aa","a"));
   dojo.byId("kind").appendChild(createOpt("bb","b"));
   dojo.byId("kind").appendChild(createOpt("cc","c"));
   dojo.byId("kind").appendChild(createOpt("dd","d"));
   dojo.byId("kind").appendChild(createOpt("ee","e"));
   dojo.byId("kind").appendChild(createOpt("ff","f"));
   dojo.byId("kind").appendChild(createOpt("gg","g"));
   dojo.byId("kind").appendChild(createOpt("hh","h"));
   dojo.byId("kind").appendChild(createOpt("ii","i"));
}
 
function setVals(obj, value){
   for(var i=0; i<obj.options.length; i++){
      if(obj.options[i].value == value){
         obj.options[i].setAttribute("selected", "true");
         break;
      }
   }
}
//-->
</script>
<body>
 
<select name="kind" id="kind">
<option value="-">-----</option>
</select>
</body>
</html>

Test page

テストする為にページをrefreshしてください。 <html> <SCRIPT TYPE=“text/javascript” SRC=“http://o.aolcdn.com/dojo/1.3/dojo/dojo.xd.js”></SCRIPT> <script type=“text/javascript”> <!–

  dojo.addOnLoad(function(){
     init();
     setVals(dojo.byId("kind"), "h");
   

});

function createOpt(label, value){

 var opt=document.createElement('option');
 opt.appendChild(document.createTextNode(label));
 opt.setAttribute('value',value);
 return opt;

}

function init(){

 dojo.byId("kind").innerHTML = "";
 dojo.byId("kind").appendChild(createOpt("aa","a"));
 dojo.byId("kind").appendChild(createOpt("bb","b"));
 dojo.byId("kind").appendChild(createOpt("cc","c"));
 dojo.byId("kind").appendChild(createOpt("dd","d"));
 dojo.byId("kind").appendChild(createOpt("ee","e"));
 dojo.byId("kind").appendChild(createOpt("ff","f"));
 dojo.byId("kind").appendChild(createOpt("gg","g"));
 dojo.byId("kind").appendChild(createOpt("hh","h"));
 dojo.byId("kind").appendChild(createOpt("ii","i"));

}

function setVals(obj, value){

 for(var i=0; i<obj.options.length; i++){
    if(obj.options[i].value == value){
       obj.options[i].setAttribute("selected", "true");
       break;
    }
 }

} –> </script> <body> <select name=“kind” id=“kind”> <option value=“-”>—–</option> </select> </body> </html> ~~DISCUSSION~~

1)
現在、最新のバージョンは1.4である。