1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

Autocomplete Function

本帖由 小叶2006-06-19 发布。版面名称:新人报道

  1. 小叶

    小叶 New Member

    注册:
    2005-09-04
    帖子:
    17,941
    赞:
    33
    PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <
    HTML>
    <
    HEAD>
    <
    TITLE> New Document </TITLE>
    <
    META NAME="Generator" CONTENT="EditPlus">
    <
    META NAME="Author" CONTENT="">
    <
    META NAME="Keywords" CONTENT="">
    <
    META NAME="Description" CONTENT="">
    <
    style>
    body,div {
    font-family:verdana;
    line-height:100%;
    font-size:9pt;
    }
    input {
    width:300px;
    }
    h1 {
    text-align:center;
    font-size:2.2em;
    }
    #divf {
    margin:10px;
    font-size:0.8em;
    text-align:center;
    }
    #divc {
    border:1px solid #333333;
    }
    .
    des {
    width:500px;
    background-color:lightyellow;
    border:1px solid #333;
    padding:20px;
    margin-top:20px;
    }
    .
    mouseover {
    color:#ffffff;
    background-color:highlight;
    width:100%;
    cursor:default;
    }
    .
    mouseout {
    color:#000000;
    width:100%;
    background-color:#ffffff;
    cursor:default;
    }
    </
    style>
    <
    SCRIPT LANGUAGE="JavaScript">
    <!--

    // script by blueDestiny
    // Email : blueDestiny [at] 126 . com

    // Object: jsAuto
    // browser: ie, mf.
    // example:

    // step1 : 
    // create autocomplete container, return object and bind event to the object, and 
    ///create a new jsAuto instance:
    // <div id="divautocomplete"></div>
    // var autocomplete = new jsAuto("autocomplete","divautocomplete")
    // handle event:
    // autocomplete.handleEvent(value, returnObjectID)
    // <input id="rautocomplete" onkeyup="autocomplete.handleEvent(this.value,"ratocomplete",event)>

    // step2 :
    // add autocompete item:
    // autocomplete.item(string)
    // string must be a string var, you can split the string by ","
    // autocomplete.item("blueDestiny,never-online,csdn,blueidea")

    // http://www.never-online.com

    //instanceName为你生成的实例名,objID为监听的对象ID
    //具体请见最下面的例子

    function jsAuto(instanceName,objID)
    {
        
    //初始化成员;
        //_msg: 预先实例化的自动完成内容
        
    this._msg = [];
        
    this._x null;
        
    this._o document.getElementByIdobjID );
        if (!
    this._o) return;
        
    //标志flag的缩写
        
    this._f null;
        
    //instanceName的缩写
        
    this._i instanceName;
        
        
    //返回的对象
        //returnObject
        
    this._r null;
        
    //按上下键时,得到当前的mouseover是第几个元素
        //count
        
    this._c 0;
        
    //是否可以执行按上下键
        //selectflag
        
    this._s false;
        
    //Value的缩写
        
    this._v null;
        
    //初始化object的状态
        
    this._o.style.display "none";
        
    this._o.style.position "absolute";
        
    this._o.style.zIndex "9999";
        
    this._offset=function(e)
        {
            var 
    e.offsetTop;
            var 
    e.offsetLeft;
            var 
    e.offsetWidth;
            var 
    e.offsetHeight;

            while(
    e=e.offsetParent)
            {
                
    t+=e.offsetTop;
                
    l+=e.offsetLeft;
            }
            return {
                
    t,
                
    l,
                
    w,
                
    h
            
    }
        }
        return 
    this;
    };

    //触发的按上下的键盘事件
    //效率不算高,可优化

    jsAuto.prototype.directionKey=function() { with (this)
    {
        var 
    _e.keyCode _e.keyCode _e.which;
        var 
    _o.childNodes.length;
        (
    _c>l-|| _c<0) ? _s=false "";

        if( 
    e==40 && _s )
        {
            
    _o.childNodes[_c].className="mouseout";
            (
    _c >= l-1) ? _c=_c ++;
            
    _o.childNodes[_c].className="mouseover";
        }
        if( 
    e==38 && _s )
        {
            
    _o.childNodes[_c].className="mouseout";
            
    _c--<=_c _o.childNodes.length-"";
            
    _o.childNodes[_c].className="mouseover";
        }
        if( 
    e==13 )
        {
            if(
    _o.childNodes[_c] && _o.style.display=="block")
            {
                
    _r.value _x[_c];
                
    _o.style.display "none";
            }
        }
        if( !
    _s )
        {
            
    _c 0;
            
    _o.childNodes[_c].className="mouseover";
            
    _s true;
        }
    }};

    // mouseEvent.
    // 鼠标事件

    jsAuto.prototype.domouseover=function(obj) { with (this)
    {
        
    _o.childNodes[_c].className "mouseout";
        
    _c 0;
        
    obj.tagName=="DIV" obj.className="mouseover" obj.parentElement.className="mouseover";
    }};
    jsAuto.prototype.domouseout=function(obj)
    {
        
    obj.tagName=="DIV" obj.className="mouseout" obj.parentElement.className="mouseout";
    };
    jsAuto.prototype.doclick=function(msg) { with (this)
    {
        if(
    _r)
        {
            
    _r.value msg;
            
    _o.style.display "none";
        }
        else
        {
            
    alert("javascript autocomplete ERROR :\n\n can not get return object.");
            return;
        }
    }};

    // object method;
    // 对象的原型方法

    // 添加项目;
    // 可以用英文,分割
    // JK说的是对的,我当初也是不想用逗号的
    // 如果你不想用,分割,可自己改写这里

    jsAuto.prototype.item=function(msg)
    {
        if( 
    msg.indexOf(",")>)
        {
            var 
    arrMsg=msg.split(",");
            for(var 
    i=0i<arrMsg.lengthi++)
            {
                
    arrMsg[i] ? this._msg.push(arrMsg[i]) : "";
            }
        }
        else
        {
            
    this._msg.push(msg);
        }
        
    this._msg.sort();
    };
    jsAuto.prototype.append=function(msg) { with (this)
    {
        
    _i "" _i = eval(_i);
        
    _x.push(msg);
        var 
    div document.createElement("DIV");

        
    //bind event to object.
        
    div.onmouseover = function(){_i.domouseover(this)};
        
    div.onmouseout = function(){_i.domouseout(this)};
        
    div.onclick = function(){_i.doclick(msg)};
        var 
    re  = new RegExp("(" _v ")","i");
        
    div.style.lineHeight="140%";
        
    div.className "mouseout";
        if (
    _vdiv.innerHTML msg.replace(re "<strong>$1</strong>");
        
    div.style.fontFamily "verdana";

        
    _o.appendChild(div);
    }};
    jsAuto.prototype.display=function() { with(this)
    {
        if(
    _f&&_v!="")
        {
            var 
    _offset(_r);
            
    _o.style.left l.l;
            
    _o.style.width l.w;
            
    _o.style.top l.l.h;
            
    _o.style.display "block";
            
    _o.style.display "block";
        }
        else
        {
            
    _o.style.display="none";
        }
    }};
    jsAuto.prototype.handleEvent=function(fValue,fID,event) { with (this)
    {
        var 
    re;
        
    _e event;
        var 
    _e.keyCode _e.keyCode _e.which;
        
    _x = [];
        
    _f false;
        
    _r document.getElementByIdfID );
        
    _v fValue;
        
    // 这里用eval,返回生成的实例对象。
        
    _i = eval(_i);
        
    re = new RegExp("^" fValue """i");
        
    _o.innerHTML="";

        for(var 
    i=0i<_msg.lengthi++)
        {
            if(
    re.test(_msg[i]))
            {
                
    _i.append(_msg[i]);
                
    _f true;
            }
        }

        
    _i _i.display() : alert("can not get instance");

        if(
    _f)
        {
            
    // 触发上下键盘的事件
            
    if((e==38 || e==40 || e==13))
            {
                
    _i.directionKey();
            }
            else
            {
                
    _c=0;
                
    _o.childNodes[_c].className "mouseover";
                
    _s=true;
            }
        }
    }};
    window.onerror=new Function("return true;");
    //-->
    </SCRIPT>
    </
    HEAD>
    <
    BODY>
    <
    div id="divc">
    <!--
    this is the autocomplete container.-->
    </
    div>
    <
    h1>Autocomplete Function</h1>
    <
    div align="center">
    <
    input onkeyup="jsAutoInstance.handleEvent(this.value,'auto',event)" id="auto">
    </
    div>
    <
    div id="divf">
    Power By Miraclenever-online
    </div>
    <
    SCRIPT LANGUAGE="JavaScript">
    <!--
    var 
    jsAutoInstance = new jsAuto("jsAutoInstance","divc");
    jsAutoInstance.item("a-start,b-start,c-start,d-start,e-start,f-start,g-start,h-start,i-start,j-start,k-start,l-start,m-start,n-start,o-start,p-start,q-start,r-start,s-start,t-start,u-start,v-start,w-start,x-start,y-start,z-start,z-start");
    jsAutoInstance.item("blueDestiny");
    jsAutoInstance.item("BlueMiracle,Blue");
    jsAutoInstance.item("angela,geniuslau");
    jsAutoInstance.item("never-online");
    //-->
    </SCRIPT>
    </
    BODY>
    </
    HTML>
    </
    body></html>
     
  2. 小叶

    小叶 New Member

    注册:
    2005-09-04
    帖子:
    17,941
    赞:
    33
  3. srsman

    srsman Active Member

    注册:
    2005-11-08
    帖子:
    1,920
    赞:
    6