我最最最可爱的javascript

一直没有这样做过,但是这次有特殊情况,一个select有几百上千个options,如果让用户手工的找到某个特定的option,那就很惨。于是决定加一个过滤的装置,当然可以设置一个交互式的查询,在新窗口查询出结果,然后选中设置opener的值。但是最后我决定用一个简洁的办法,非常有效,哈哈。







<script language="javascript">
 function selectGroup(v){
  var obj=document.all.groupid;
  for(var i=0;i<obj.options.length;i++){
   if(obj.options[i].value==v){
    obj.options[i].selected=true;
   }else{
    obj.options[i].selected=false;
   }
  }
 }
 function goFilter(start){
  var k=document.all.filterText.value;
  var obj=document.all.groupid;
  var found=false;
  var value=0;
  if(start>10)return false; //10个字符内没有找到就放弃
  if(k&&obj.options){
   for(var i=0;i<obj.options.length;i++){
    if(obj.options[i].innerText.toLowerCase().indexOf(k)==start){
     found=true;
     value=obj.options[i].value;
     break;
    }
   }
   if(found){
    selectGroup(value);
    return true;
   }else{
    return(goFilter(start+1));
   }
  }else{
   return(false);
  }
 }

 </script>
 <select name="groupid" style="width:200px">
  <option value="0" selected >创建新分组</option>
  <option value="4">画魂</option>
  <option value="7">DVD]指环王I-魔戒之魔戒现身</option>
  <option value="8">[DVD]指环王II-魔戒之双塔奇兵加长版4小时</option>
  <option value="10">[DVD]指环王III-魔戒之王者归来</option>
.....................
  <option value="498">杀杀人跳跳舞</option>
  <option value="499">一个字头的诞生</option>
      </select>&nbsp; &nbsp;
   <input type="text" name="filterText" value="" size="15"><input type="button" value="过滤/查找" onclick="var r=goFilter(0);if(!r){alert('没有找到:(');}">
   <br>

但这个查询我最后还是决定设置一个固定的限制位数,因为不想查询太慢还要去查询一次最长的字符串的长度。
最后我的感想就是:
Javascript太可爱啦!
不过有一个地方倒是可以改进改进,selectGroup倒是不需要遍历,只需要知道options的游标就可以了,呵呵:
<script language="javascript">
 function selectGroup(v){
  var obj=document.all.groupid;
  obj.options[v].selected=true; //直接选中
 }
 function goFilter(start){
  var k=document.all.filterText.value;
  var obj=document.all.groupid;
  var found=false;
  var value=0;
  if(start>10)return false; //10个字符内没有找到就放弃
  if(k&&obj.options){
   for(var i=0;i<obj.options.length;i++){
    if(obj.options[i].innerText.toLowerCase().indexOf(k)==start){
     found=true;
     value=obj.options[i].value;
     break;
    }
   }
   if(found){
    selectGroup(i);//选中这个序号所在的option就可以了
    return true;
   }else{
    return(goFilter(start+1));
   }
  }else{
   return(false);
  }
 }

 </script>
反正只是一个小改动,无所谓,客户端的资源而以

评论(1)

评论

  1. 把笔记写成这样,你也真够八卦的了,难道是改相本用的?

发表评论

*必填

*必填 (不会被公开)