<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
function catch_keydown(sel)
{
switch(event.keyCode)
{
case 13:
//Enter;
sel.options[sel.length] = new Option("","",false,true);
event.returnValue = false;
break;
case 27:
//Esc;
alert("text:" + sel.options[sel.selectedIndex].text + ", value:" + sel.options[sel.selectedIndex].value + ";");
event.returnValue = false;
break;
case 46:
//Delete;
if(confirm("Delete!?"))
{
sel.options[sel.selectedIndex] = null;
if(sel.length>0)
{
sel.options[0].selected = true;
}
}
event.returnValue = false;
break;
case 8:
//Back Space;
var s = sel.options[sel.selectedIndex].text;
sel.options[sel.selectedIndex].text = s.substr(0,s.length-1);
event.returnValue = false;
break;
}
}
function catch_press(sel)
{
sel.options[sel.selectedIndex].text = sel.options[sel.selectedIndex].text + String.fromCharCode(event.keyCode);
event.returnValue = false;
}
//End -->
</script></head>
<select size="1" name="fh_cp" onKeyDown="catch_keydown(this);" onKeyPress="catch_press(this);" style="font-size:12px;">
<option></option>
<?if ($FH_CP<>""){
$seek_cp="select gg,cp from bom where lh=\'$FH_CP\' ";
$result_cp=@pg_exec($link,$seek_cp);
$GG=trim(pg_result($result_cp,0,"gg"));
$CP=trim(pg_result($result_cp,0,"cp"));
$C_G=$CP.\' \'.$GG;echo "<option selected value=\\"$FH_CP\\">$C_G</option>"; }?>
<?for($j=0;$j<$row_fh;$j++){
$gg_fh=trim(pg_result($result_fh,$j,"gg"));
$cp_fh=trim(pg_result($result_fh,$j,"cp"));
$seek_lh="select * from bom where cp=\'$cp_fh\' and gg=\'$gg_fh\' ";
$result_lh=pg_exec($link,$seek_lh);
$lh_fh=trim(pg_result($result_lh,0,"lh"));
$cp_gg=$cp_fh.\' \'.$gg_fh;if($lh_fh==$FH_CP){
echo "<option selected value=\\"$lh_fh\\">$cp_gg</option>";
}
else{
echo "<option value=\\"$lh_fh\\">$cp_gg</option>";
}
}
?>
</select> 

解决方案 »

  1.   

    想做一个既可输入又可选择的下拉框,如下<HTML>
     <HEAD>
      <SCRIPT LANGUAGE="javascript">
     </SCRIPT> <SCRIPT LANGUAGE="javascript">
    function Body_Init(oSelect,oText)
    {
     var iLeft= oSelect.offsetLeft;
     var iTop = oSelect.offsetTop;
     var iWidth=oSelect.clientWidth;
     var iHeight=oSelect.clientHeight;oSelect.style.clip='rect(0,'+iWidth+','+iHeight+','+(iWidth-18)+')';
     
     oText.style.width=iWidth;
     oText.style.height=iHeight;
     oText.style.top =iTop;
     oText.style.left=iLeft;
    }
    function Combo_Select(oSelect,oText)
    {
     oText.value=oSelect.options[oSelect.selectedIndex].text;
     alert(oText.value);
    }
    function Text_ChkKey(oSelect,oText)
    {
     if(event.keyCode==13)
     {
      var nIndex=HasTheValue(oText.value,oSelect);
      if(nIndex !=-1 && nIndex !=oSelect.selectedIndex)
      {
       oSelect.selectedIndex=nIndex;
      }
     }
    }
    function HasTheValue(name,oSelect)
    {
     if(oSelect.options.length<1)
      return -1;
     var i=0;
     for(i=0;i<oSelect.options.length;i++)
     {
      if(oSelect.options[i].text==name)
       return i;
     }
     return -1;
    } </SCRIPT>
     </HEAD>
     <BODY>
     <table width=50% width=50% align="center" valign="middle">
     <tr><td>
      <SELECT style="position:absolute;"    ONCHANGE="Combo_Select(this,pText)" NAME="pCombo" id="pCombo">
      <option value="d">test1
      <option value="dd">test2  
      </SELECT>
      <INPUT style="position:absolute;"   onKeyPress="Text_ChkKey(pCombo,this)" TYPE="TEXT" NAME="pText" id="pText">
      </td></tr>
      </table>
      <script language="javascript" type="text/javascript">
      <!--
      Body_Init(pCombo,pText);
      //-->
      </script>
      </BODY>
    </HTML>
      

  2.   

    至于你的后面的2个要求,第一个是php,asp/jsp的问题。第二个是js的问题。看别的兄弟答你吧
      

  3.   

    我写了一个,你试试看吧。
    /************************************************************************/
    <html>
    <body>
    <FORM id=FORM1 name=FORM1 method=post language=JavaScript>
    <INPUT class="Input" id=TxtBoxNo name=TxtBoxNo onkeyup="return Item_onkeyup(this,FORM1.BoxNo_input)"><span class="Span" id=SpanBoxNo name="SpanBoxNo">
    <SELECT class="Select" id=BoxNo_input name=BoxNo_input onBlur="return Item_onBlur(this,FORM1.TxtBoxNo)" onMouseOver="return Item_onMouseOver(this)" onchange="return Input_onchange(this)"> 
         <OPTION value="1" selected>1</OPTION>
     <OPTION value="2">2</OPTION>
     <OPTION value="3">3</OPTION>
     <OPTION value="4">4</OPTION>
     <OPTION value="5">5</OPTION>
     <OPTION value="6">6</OPTION>
     <OPTION value="7">7</OPTION>
     <OPTION value="8">8</OPTION>
     <OPTION value="9">9</OPTION>
     <OPTION value="10">10</OPTION>
    </SELECT>
    </span>
    <script language="JavaScript">
    function Item_onkeyup(Object,ObjSelect){
    var src = Object.value;
    /*
    if( ObjSelect.id == "BoxNo_input" ){
    var LoopLen=
    6-src.length; for(vari=0,j=0;i<LoopLen;i++ ){
    src = j.toString() + src.toString();
    }
    }
    */
    var hoststr = ObjSelect.value;
    var pos=1;
    //var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
    //if (ver >= 5.5){
    for(var i=0; i< ObjSelect.length ;i++){
    hoststr = Rtrim(ObjSelect.options[i].value.toString());
    if( Rtrim(src) == Rtrim(hoststr) ){
    pos = 0;
    }
    //alert( pos );
    if( pos == 0 ){
    ObjSelect.options[i].selected = true;
    if( ObjSelect.options[ObjSelect.length-1].text == "&#65400;&#65411;&#65430;&#65397;&#65394;&#65403;&#65402;&#65423;&#65399;&#65384;" ) {
    ObjSelect.options[ObjSelect.length-1] = null;
    }
    return true;
    }//if()
    else{
    ObjSelect.value = "";
    }
    }//for()
    if( ObjSelect.value == "" ){
    if( ObjSelect.options[ObjSelect.length-1].value != "" ){
    ObjSelect.options[ObjSelect.length] = new Option("&#65400;&#65411;&#65430;&#65397;&#65394;&#65403;&#65402;&#65423;&#65399;&#65384;","",false,true);
    }//if()
    }//if()
    //}//if()
    }//function()
    function Item_onBlur(Object,TxtObject){
    Object.style.width=22;
    Object.style.left=0;
    }
    function Item_onMouseOver(Object){
    Object.style.width=135;
    Object.style.left=-113;
    }
    function Input_onchange(ObjSelect) {
    if( ObjSelect.id == "BoxNo_input" ) {
    FORM1.TxtBoxNo.value = ObjSelect.value;
    }
    else if( ObjSelect.id == "UserID_input" ) {
    FORM1.TxtUserID.value = Rtrim(ObjSelect.value);
    }
    if( ObjSelect.options[ObjSelect.length-1].text == "&#65400;&#65411;&#65430;&#65397;&#65394;&#65403;&#65402;&#65423;&#65399;&#65384;" ) {
    ObjSelect.options[ObjSelect.length-1] = null;
    }
    }
    function Rtrim(Value){
    var src=Value;
    var des=" ";
    var pos = src.search(des);
    return src.substring( 0, pos )?src.substring( 0, pos ):Value;
    }
    </script><STYLE type=text/css>
    .Input
    {
    FONT-WEIGHT:700;
    COLOR:WHITE;
    BACKGROUND-COLOR:ORANGE;
    HEIGHT:20PX;
    WIDTH:113PX;
    }
    .Span
    {
    POSITION:absolute;
    }
    .Select
    {
    FONT-WEIGHT:700;
    LEFT:0PX;
    POSITION:absolute;
    TOP:0px;
    WIDTH:22px;
    COLOR:WHITE;
    BORDER-RIGHT-LEFT:0px;
    BACKGROUND-COLOR:ORANGE;
    }
    </STYLE>
    </FORM>
    </body>
    </html>
      

  4.   

    这个可编辑下拉列表支持索引功能,也就是当在Input中输入后,可以定位到下拉列表中,如果没有则会有错误提示。:)
      

  5.   

    "&#65400;&#65411;&#65430;&#65397;&#65394;&#65403;&#65402;&#65423;&#65399;&#65384;" 这一部分替换成"该值不合法"即可,也就是错误提示。
      

  6.   

    有個更簡單的方法,大家切磋下:
    <span><input name="Department1" id="Department1" style=" border right:0;width:130" autocomplete="off">
    <span style="width:150;overflow:hidden">
    <select  style="width:150;margin-left:-130" onChange="Department1.value=value"> 
           <option value=""></option>
           <option value="asdfasfadf">asdfasfadf</option>
           <option value="546546">546546</option>
    </select>
      

  7.   

    野风的在ie,firefox里显示一团糟,改改吧。