测试代码:
<HTML>
<HEAD>
<TITLE>可根据输入匹配选项</TITLE>
</HEAD>
<Script Language="JavaScript">
<!--
   var whichText;
    function selectStation(obj) {
   var objSelStation = obj;
        if (obj.selectedIndex != -1) {
            var stationName = obj.options[obj.selectedIndex].text;
            whichText.value = stationName;
        }
        showDivStation(this, false,'selStation')//鼠标单击某一选项选定后关闭下拉框
    }//响应text的事件
   var pageD =0, pageU;
    function similarFind(txtObj,seledName) {
var curStationName = (txtObj.value).toUpperCase();
        var objSelStation = eval("document.myform."+seledName);//根据实际的form name修改
        var stationLength = objSelStation.options.length;
   pageU = pageD;
        
//匹配用text中的数据跟下拉框中的数据
        for (var i=0; i<stationLength; i++) {
            var stationName = objSelStation.options[i].text;
          
    var re = new RegExp("^" + curStationName);
       // curStationName=curStationName.replace(/ /g,'\xa0');
      
   if (stationName.match(re)) {
                if (i<stationLength - 10) {
                    objSelStation.selectedIndex = i + 10;
                }
                objSelStation.selectedIndex = i;
       pageD = i;
       pageU = i;
   
                break;
            }
        }
//响应下移键
   if(event.keyCode==40) {
     pageD++;
     if(pageD==objSelStation.options.length) pageD=0;
     txtObj.value=objSelStation.options[pageD].text ;
     objSelStation.selectedIndex = pageD;
   }
//响应上移键
   if(event.keyCode==38) {
     --pageU;
     if(pageU<0) pageU=objSelStation.options.length-1;
     txtObj.value = objSelStation.options[pageU].text;
     objSelStation.selectedIndex = pageU;
    }
}
//下拉框显示位置
    function showDivStation(obj, b,selName) {
        var divStation = eval("document.myform."+selName);//根据实际的form name修改
        if (b) {
            whichText = obj;
            divStation.style.top = 20;
            divStation.style.left = 0;
            divStation.style.display="block";
            similarFind(obj,selName);
        } else {
            divStation.style.display="none";
        }
    }

 var isMDown;
  document.onmouseup=document.onmousedown=function(evt){
      var evt=window.event||evt;
      var el=evt.target||evt.srcElement;
      if(el.name!='put' && el.name!='selStation' ){
          if(evt.type=='mousedown'){
              isMDown=1;
              return ;    
          }else if(isMDown){
              document.myform.selStation.style.display='none';
              isMDown=0
          }
      }
  }
//-->
</Script>
<BODY bgcolor="#FFFFFF" topmargin="0" leftmargin="0">
<form name="myform" >
<table border="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
<tr>
     <td width="6%" valign="top">数据测试</TD>
     <td width="94%" bgcolor="#FFFFFF"> 
    <!-- onfocus获取焦点时弹出下拉框 onkeyup按上下键时在下拉框中移动 -->
    <input type="text" size="70" name="put" style="width:120" onFocus="showDivStation(this, true,'selStation')" onKeyUp="similarFind(this,'selStation')" value=""> 
    <!-- onclick鼠标点击时选择选项 -->
    <select name="selStation" size="10" style="display:none;width:120;" onclick="selectStation(this)">
      <option>AA</option>
      <option>BB</option>
      <option >CC</option>
      <option >C C</option>
      <option >C-1</option>
      <option >(0-1)</option>
      <option >(0-1)</option>
      <option >C-1 (0-1)a</option>
      <option >C-1 (0-2)</option>
      <option >C-1 (0-2)b</option>
      <option >C-1 (0-0.4)</option>
      <option >C-1 (0-0.4)b</option>
    </td>
</table>
</form>
</BODY>
</HTML>有三个问题:
1、在输入英文状态时的小括号怎么来匹配?
2、如果输入C-1 (0-0.4)b就不能匹配?(这里的括号我故意弄成中文状态的)
3、一般输入时都是输英文状态的小括号,怎么在匹配时也能匹配到中文状态的小括号?

解决方案 »

  1.   

    你先把"( )"替换成  (),不用正则直接 用 indexOf()==0判断
      

  2.   

    你能在测试代码改一下吗?
    <HTML>
    <HEAD>
    <TITLE>可根据输入匹配选项</TITLE>
    </HEAD>
    <Script Language="JavaScript">
    <!--
       var whichText;
        function selectStation(obj) {
       var objSelStation = obj;
            if (obj.selectedIndex != -1) {
                var stationName = obj.options[obj.selectedIndex].text;
                whichText.value = stationName;
            }
            showDivStation(this, false,'selStation')//鼠标单击某一选项选定后关闭下拉框
        }//响应text的事件
       var pageD =0, pageU;
        function similarFind(txtObj,seledName) {
    var curStationName = (txtObj.value).toUpperCase();
            var objSelStation = eval("document.myform."+seledName);//根据实际的form name修改
            var stationLength = objSelStation.options.length;
       pageU = pageD;
        var repReg=/(()|())/g;
        function rep(_,a,b){ return a?'(':')'}
      curStationName=curStationName.replace(repReg, rep);
    //匹配用text中的数据跟下拉框中的数据
            for (var i=0; i<stationLength; i++) {
                var stationName = objSelStation.options[i].text;
              
        //var re = new RegExp("^" + curStationName);
        
        stationName=stationName.replace(repReg, rep).toUpperCase();
       if (    stationName.indexOf(curStationName)==0   ) {
            if (i<stationLength - 10) {
                        objSelStation.selectedIndex = i + 10;
            }
                    objSelStation.selectedIndex = i;
           pageD = i;
           pageU = i;
       
                    break;
                }
            }
    //响应下移键
       if(event.keyCode==40) {
         pageD++;
         if(pageD==objSelStation.options.length) pageD=0;
         txtObj.value=objSelStation.options[pageD].text ;
         objSelStation.selectedIndex = pageD;
       }
    //响应上移键
       if(event.keyCode==38) {
         --pageU;
         if(pageU<0) pageU=objSelStation.options.length-1;
         txtObj.value = objSelStation.options[pageU].text;
         objSelStation.selectedIndex = pageU;
        }
    }
    //下拉框显示位置
        function showDivStation(obj, b,selName) {
            var divStation = eval("document.myform."+selName);//根据实际的form name修改
            if (b) {
                whichText = obj;
                divStation.style.top = 20;
                divStation.style.left = 0;
                divStation.style.display="block";
                similarFind(obj,selName);
            } else {
                divStation.style.display="none";
            }
        } var isMDown;
      document.onmouseup=document.onmousedown=function(evt){
          var evt=window.event||evt;
          var el=evt.target||evt.srcElement;
          if(el.name!='put' && el.name!='selStation' ){
              if(evt.type=='mousedown'){
                  isMDown=1;
                  return ;    
              }else if(isMDown){
                  document.myform.selStation.style.display='none';
                  isMDown=0
              }
          }
      }
    //-->
    </Script>
    <BODY bgcolor="#FFFFFF" topmargin="0" leftmargin="0">
    <form name="myform" >
    <table border="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
    <tr>
         <td width="6%" valign="top">数据测试</TD>
         <td width="94%" bgcolor="#FFFFFF"> 
        <!-- onfocus获取焦点时弹出下拉框 onkeyup按上下键时在下拉框中移动 -->
        <input type="text" size="70"  name="put" style="width:120;ime-mode:disabled" onFocus="showDivStation(this, true,'selStation')" onKeyUp="similarFind(this,'selStation')" value=""> 
        <!-- onclick鼠标点击时选择选项 -->
        <select name="selStation" size="10" style="display:none;width:120;" onclick="selectStation(this)">
          <option>AA</option>
          <option>BB</option>
          <option >CC</option>
          <option >C C</option>
          <option >C-1</option>
          <option >(0-1)</option>
          <option >(0-1)</option>
          <option >C-1 (0-1)a</option>
          <option >C-1 (0-2)</option>
          <option >C-1 (0-2)b</option>
          <option >C-1 (0-0.4)</option>
          <option >C-1 (0-0.4)b</option>
        </select >
        </td>
    </table>
    </form>
    </BODY>
    </HTML>