下拉菜单中英文数字首字匹配 本人已搞定汉字匹配,数字,字母的搞不定请大虾看看<script src=qswhGB2312.js></script>
<br>输入名字的首字缩写即可找到,如张三火(zsh)
<select name="username" onkeydown=spellList() onchange=alert(this[selectedIndex].sp)>
     <option value="1">张三</option>
     <option value="2">张三火</option>
 <option value="2">张2</option>
 <option value="2">张3</option>
 <option value="2">张4</option>
     <option value="3">李四</option>
     <option value="4">李四水</option>
 <option value="4">王</option>
 <option value="4">王2</option>
 <option value="4">王3</option>
 <option value="4">1</option>
 <option value="4">2</option>
</select><script>
var sel="",timer=null;
function spellList(){
/********(qiushuiwuhen 2002-9-20)***********/
       with(window.event){
          with(srcElement){
              if(keyCode<48)return;
              if(keyCode>95)keyCode-=48
              sel+=String.fromCharCode(keyCode);
              window.status=sel;
 // alert(String.fromCharCode(keyCode));
  if(midstr(sel)==1)
  {
  selectedIndex=options.selectedIndex+1;
  }
  else{
  //alert(length);
              for(i=0;i<length;i++){
               if(!options[i].sp){
                var tmp="",arr=getSpell(options[i].text,"'").split("'")
                for(var j=0;j<arr.length;j++)tmp+=arr[j].substr(0,1).toUpperCase();
                options[i].sp=tmp;
               }
   //alert(options[i].sp);
               if(options[i].sp.indexOf(String.fromCharCode(keyCode))==0){selectedIndex=i;break;}
              }
  }
          }
  
          returnValue=false;
          clearTimeout(timer)
          timer=setTimeout("sel=''",1000);
     }
}
function midstr(tempstr){
var x=0;
if (tempstr.length>1)
{
if (tempstr.substr(tempstr.length-1,1)==tempstr.substr(tempstr.length-2,1) )
{
return 1;
}
else{return 0;}
}
else{return 0;}
}
</script>

解决方案 »

  1.   

    http://www.showtui.com/qswhGB2312.js
    下载 qswhGB2312.js js文件
      

  2.   

    看看是不是这样
    <html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>test</title>
    </head><body>
    <script src="http://www.showtui.com/qswhGB2312.js"></script>
    <br>输入名字的首字缩写即可找到,如张三火(zsh)
    <select name="username" onkeydown=spellList() onchange=alert(this[selectedIndex].sp)>
         <option value="1">张三</option>
         <option value="2">张三火</option>
         <option value="2">张2</option>
         <option value="2">张3</option>
         <option value="2">张4</option>
         <option value="3">李四</option>
         <option value="4">李四水</option>
         <option value="4">王</option>
         <option value="4">王2</option>
         <option value="4">王3</option>
         <option value="4">1</option>
         <option value="4">2</option>
    </select><script>
    var sel="",timer=null;
    function spellList(){
    /********(qiushuiwuhen 2002-9-20)***********/
           with(window.event){
              with(srcElement){
                  if(keyCode<48)return;
                  if(keyCode>95)keyCode-=48
                  sel+=String.fromCharCode(keyCode);
                  window.status=sel;
                 // alert(String.fromCharCode(keyCode));
                  if(midstr(sel)==1)
                  {
                  selectedIndex=options.selectedIndex+1;
                  }
                  else{
                  //alert(length);
                  for(i=0;i<length;i++){
                   if(!options[i].sp){
                    var tmp="";
                    var arr = [];
                    for(var k=0;k<options[i].text.length;k++){
                     if(options[i].text.charCodeAt(k)>128){
                         arr.push(getSpell(options[i].text.charAt(k)));
                     }else{
                     arr.push(options[i].text.charAt(k));
                     }
                    }
                    for(var j=0;j<arr.length;j++)tmp+=arr[j].substr(0,1).toUpperCase();
                    options[i].sp=tmp;
                   }
                   //alert(options[i].sp);
                   if(options[i].sp.indexOf(String.fromCharCode(keyCode))==0){selectedIndex=i;break;}
                  }
                  }
              }
              
              returnValue=false;
              clearTimeout(timer)
              timer=setTimeout("sel=''",1000);
         }
    }
    function midstr(tempstr){
        var x=0;
        if (tempstr.length>1)
        {
            if (tempstr.substr(tempstr.length-1,1)==tempstr.substr(tempstr.length-2,1) )
            {
            return 1;
            }
            else{return 0;}
        }
        else{return 0;}
    }
    </script></body></html>
      

  3.   


    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
     <HEAD>
      <TITLE> New Document </TITLE>
      <SCRIPT LANGUAGE="JavaScript">
      <!--
    function fn(s){
    var opts=document.getElementById("slt");
    var pattern=new RegExp("^"+s,"i");
    for(var i=0;i<opts.length;i++){
    if(pattern.test(opts[i].text)){
    opts[i].selected=true;
    return true;
    }
    }
    return false;
    }
      //-->
      </SCRIPT>
     </HEAD> <BODY>
    <input type="text" onkeyup="fn(this.value)"/><br/>
    <select id="slt" size="10">
    <option>a</option>
    <option>ab</option>
    <option>abc</option>
    <option>abcd</option>
    <option>0</option>
    <option>012</option>
    <option>0123456</option>
    </select>
     </BODY>
    </HTML>
      

  4.   

    楼上两位各有千秋
    lihui_shine 这位比如我输入z会查找z相关的汉字和字母,我想连续输入z只在匹配上的汉字和字母间循环,而不是直接跳到下一个。谢谢大侠shanlilaide  这位大侠。我想连汉字也匹配上。不单纯字符数字
      

  5.   

    请问shanlilaide  为什么你的可以在匹配中循环呢?
      

  6.   

    这可是你查找算法的问题了,LZ不是说中文的搞定了吗?
    我只是将字母和数字也加到option的sp属性其实LZ说的也不难实现,只需要判断输入字符,如果是字母的话,找下一个以汉字或字母开头的就可以了
      

  7.   


    其实是在循环中匹配,检查每个text是否匹配汉字匹配你不是搞定了么,只要在你的代码里加入这个就应该行了吧
      

  8.   

    现在总监说不行。要那个功能,比如里面有z能匹配的(包括数字)。如果连续输入z则在所有匹配z种循环。我写的是直接下一个,请两位大侠帮帮小弟忙
      

  9.   

    我觉得,到底要做成什么样子,LZ自己心里都没数,我们如何帮你做呢建议LZ总结一下,把方案拿给总监看,如果行的话,再动手不迟
    我举个例子
    比如有个人叫周丽丽,当输入ZLL时,按楼主的意义,显然匹配不到周丽丽,而是找以L开头的去了这样你们总监肯定又不答应了^_^