有個空間

          有個標(biāo)題

          多選框左右移 select multiple="multiple" 超時loop

          背景
          在項(xiàng)目中用到用到了多選框的左右移,其中碰到一些問題,記錄下。

          下面這是頁面內(nèi)容


          頁面代碼如下
           1 <select multiple="multiple" name=idNoSelectedCode id="idNoSelectedCode" size=10 style="FONT-FAMILY: courier new; FONT-SIZE: 13px; font-weight: bold;width=100%">
           2                 <logic:present name="equipmentList" scope="session">
           3                     <logic:iterate id="rs" name="equipmentList" indexId="varId">
           4                         <option value="<%= varId%>">${rs.eqid}</option>         
          <!--這里當(dāng)時value設(shè)的值也是
          ${rs.eqid},如果有重復(fù)的話就會出現(xiàn)問題,所以改成用不會重復(fù)的varId-->
           5                     </logic:iterate>
           6                 </logic:present>
           7                 <logic:notPresent name="equipmentList" scope="session">
           8                     <option value="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
           9                 </logic:notPresent>
          10             </select>
          11             </td>
          12             <td width="10%" class="formFieldInput" align="center">
          13                 <table><tr><td><input type=button value="->>" onclick="javascript:moveAll('idNoSelectedCode','idSelectedCode');" style="FONT-FAMILY: courier new; FONT-SIZE: 12px">
          14                 </td></tr><tr><td><input type=button value="-->" onclick="javascript:srcToDest('idNoSelectedCode','idSelectedCode');" style="FONT-FAMILY: courier new; FONT-SIZE: 12px">
          15                 </td></tr><tr><td><input type=button value="<--" onclick="javascript:srcToDest('idSelectedCode','idNoSelectedCode');" style="FONT-FAMILY: courier new; FONT-SIZE: 12px">
          16                 </td></tr><tr><td><input type=button value="<<-" onclick="javascript:moveAll('idSelectedCode','idNoSelectedCode');" style="FONT-FAMILY: courier new; FONT-SIZE: 12px">
          17                 </td></tr></table>
          18             </td>
          19             <td width="35%">
          20             <select multiple="multiple" name=idSelectedCode id="idSelectedCode" size=10 style="FONT-FAMILY: courier new; FONT-SIZE: 13px; font-weight: bold;width=100%">
          21             
          22             </select>

          實(shí)現(xiàn)
          關(guān)鍵是幾個javascript 函數(shù)的實(shí)現(xiàn)。
           1 function moveAll(srcid,destid)
           2     {
           3         var optionsObjects=document.getElementById(srcid);
           4         for(var o=0;o<optionsObjects.length;o++)
           5         {
           6             optionsObjects.options[o].selected=true;
           7         }
           8         srcToDest(srcid,destid);
           9     }    
          10     function srcToDest(srcid,destid)  
          11     {  
          12          var optionsObjects=document.getElementById(srcid);
          13         var optionsSubObjects=document.getElementById(destid);
          14                 
          15         for(var o=0;o<optionsObjects.length;o++)
          16          {
          17              if(optionsObjects.options[o].selected==true)
          18               {
          19                  var optionsvalue=optionsObjects.options[o].value;
          20                  var optionstext=optionsObjects.options[o].text;
          21                  addoptions(srcid,destid,optionstext,optionsvalue);
          22                  o = o- 1;                                                                                
                                //這里是發(fā)生死循環(huán)的主要原因,如果沒有重復(fù)數(shù)據(jù),這里源框會移走一條數(shù)據(jù),所以o要減1。
                               //但是當(dāng)有重復(fù)數(shù)據(jù)時不會移走,導(dǎo)致o-1,下個循環(huán)再+1,還是自己本身,死循環(huán)發(fā)生鳥。

          23               }
          24          }
          25      }
          26      
          27     function addoptions(srcid,destid,optionstext,optionsvalue)
          28      {
          29          var optionsObjects=document.getElementById(srcid);
          30          var optionsSubObjects=document.getElementById(destid);
          31          var hasexist=0;
          32          for(var o=0;o<optionsSubObjects.length;o++)
          33          {
          34               var optionsvalue_sub=optionsSubObjects.options[o].value;
          35               if(optionsvalue_sub==optionsvalue)                                 //判斷在目標(biāo)框中是否存在這個值,這里用select的value才不會出現(xiàn)重復(fù)的情況。
          36                   hasexist+=1;
          37          }
          38          if(hasexist==0)
          39          {
          40               optionsSubObjects.add(new Option(optionstext,optionsvalue));
          41               for(var o=0;o<optionsObjects.length;o++)
          42              {
          43                   var optionsvalue_src=optionsObjects.options[o].value;
          44                   if(optionsvalue_src==optionsvalue)                            //判斷在源框中是否存在這個值,這里也必須用select的value。
          45                    optionsObjects.options.remove(o);
          46              }
          47          }
          48      }

          下面是要取出目標(biāo)框中我們移過去的值
          1 var optionsObjects=document.getElementById("idSelectedCode");
          2 
          3 for(var o=0;o<optionsObjects.length;o++)
          4         {
          5             var optionstext=optionsObjects.options[o].text;              //這里用text,因?yàn)関alue并不是我們需要的。
          6             equipItemList +=optionstext+";";
          7         }

          這個equipItemList 就是用分號拼接出來的值,下面是蒸是炒是炸就看你的了。

          問題:
          一開始的時候我都是用text去比較,結(jié)果text的值不可靠,出現(xiàn)重復(fù)的情況。然后導(dǎo)致IE彈出”Stop running this script“
          ,一個運(yùn)行緩慢的警告框。當(dāng)時是以為數(shù)據(jù)太多的原因,后來發(fā)現(xiàn)是因?yàn)橛兄貜?fù)的值導(dǎo)致死循環(huán)計(jì)算,IE自己彈出運(yùn)行緩慢的警告。



          posted on 2010-12-08 11:07 游雯 閱讀(570) 評論(0)  編輯  收藏 所屬分類: Java編程技巧

          主站蜘蛛池模板: 库车县| 芦山县| 德昌县| 千阳县| 鄂伦春自治旗| 弋阳县| 班玛县| 巫溪县| 习水县| 静海县| 新巴尔虎右旗| 彭州市| 福海县| 岳普湖县| 克拉玛依市| 曲周县| 陇西县| 阜平县| 集安市| 峨山| 平果县| 江津市| 托克托县| 葫芦岛市| 依兰县| 屏边| 浦北县| 漾濞| 吉水县| 锦屏县| 彰武县| 华亭县| 河池市| 聂拉木县| 丹江口市| 博客| 汾阳市| 兴化市| 招远市| 冷水江市| 新津县|