输入后通过XMLHttp将查询参数发送到服务端,查询后返回的内容显示在一个div中,在div中列出的数据中选择数据后设置此div为隐藏;

解决方案 »

  1.   

    只响应键盘,并没有做响应鼠标的,数据在JS数组,
    <script type="text/javascript">
    var data = ["a", "ab", "ac", "abc", "b", "b1", "b2", "b123", "ice", "ice_berg","ice_berg16"];
    var $ = document.getElementById;
    function autoComplete(pattern){
    if( pattern == "" )
    {
    $("container").style.visibility='hidden';
    return;
    }
    var reg = new RegExp("^"+pattern);
    reg.compile("^"+pattern);
    var lis = [];
    for(i=0;i<data.length;i++)
    {
    if( reg.test(data[i]) )
    lis.push( "<li>"+data[i]+"</li>" );
    }
    if( lis.length > 0 )
    {
    $("container").innerHTML = lis.join("");
    $("container").style.visibility='visible';
    position($('container'), $('ice'));
    }
    else
    $("container").style.visibility='hidden';
    }function position(o,r){
    or = r;
    l = r.offsetLeft;
    t = r.offsetTop;
    while(r=r.offsetParent)
    {
    l += r.offsetLeft;
    t += r.offsetTop;
    }
    o.style.left = l + "px";
    o.style.top  = (t + or.offsetHeight + 2 ) + "px";
    }
    var current = -1;
    var last    = -1;
    document.onkeydown= function(){
    itemSize = $("container").childNodes.length;
    switch( event.keyCode )
    {
    case 38: //up
    if( current >= 0 )
    last = current;
    current--;
    if( current < 0 ) current = itemSize - 1;
    changeItem();
    break;
    case 40: //down
    if( current >= 0 )
    last = current;
    current++;
    if( current > itemSize - 1 )
    current = 0;
    changeItem();
    break;
    case 13: //enter
    selectItem();
    break;
    }
    }function changeItem()
    {
    $("container").childNodes[current].className="over";
    if( last  >= 0 )
    {
    $("container").childNodes[last].className="out";
    }
    }
    function selectItem()
    {
    $("ice").value = $("container").childNodes[current].innerHTML;
    $("container").style.visibility='hidden';
    last = current = -1;
    }
    </script>
    <style>
    #container{
    margin:0;
    border:1px solid #000;
    width:150px;
    visibility:hidden;
    position:absolute;
    }
    #container li{
    }
    .over{
    background:#08246B;
    color:#FFF;
    }
    .out{
    background:#FFF;
    color:#000;
    }
    </style><input type="text" id="ice" onpropertychange="autoComplete(this.value)"/>
    <ul id="container"></ul>
      

  2.   

    非常谢谢上面的朋友,但是有个问题我的数据是从数据库读取的 可能是上千上W条我不可能在预先存进一个JS数组,只能是用户先输入一个大类编号比如01 ,敲回车,然后显示出01下面所有的类别的信息,用户再加以选择
      

  3.   

    取数据库的话就要用AJAX了。
    数据传输可以用xml格式server端要根据分类生成XML文件在客户端用js通过xmlhttp接收xml数据,再做显示处理。
      

  4.   

    这个还是ajax,或者直接写成xml数据岛,给select绑定
      

  5.   

    ice_berg16(寻梦的稻草人)谢谢你的指点能不能教教我怎么实现你说的:server端要根据分类生成XML文件在客户端用js通过xmlhttp接收xml数据,再做显示处理。最好给我个简单的例子我以前根本就没弄过ajax,