模仿Google的搜索提示框

var $=function(a_sID){return document.getElementById(a_sID);}
var $$=function(a_sName){return document.getElementsByTagName(a_sName);}
var $F=function(a_sID) {
    var oObj=$(a_sID);
    if(!oObj) oObj=document.forms[a_sID];
    return oObj;
}
function TSuggestionBox() {
    //私有属性
    this._boxes={};
    this._position=0;
    this._suggestion="";
    this._object=this;
    //私有方法
    this._setStyle=TSuggestionBox_SetStyle;
    this._getSearchResult=TSuggestionBox_GetSearchResult;
    this._listenItem=TSuggestionBox_ListenItem;
    //公共方法
    this.listen=TSuggestionBox_Listen;
    this.clear=TSuggestionBox_Clear;
}
function TSuggestionBox_Listen(a_sSearchBoxId, a_sSuggestionBoxId,a_sURL, a_sFormId) {//监听搜索框及搜索建议提示框
    var oSearchBox=$(a_sSearchBoxId);
    if(!oSearchBox) return;
    this._boxes[a_sSearchBoxId]=[a_sSuggestionBoxId,a_sURL, a_sFormId];
    var oSuggestionBox=this._object;
    oSearchBox.onkeydown=function(e){
        var oObj=$(a_sSuggestionBoxId);
        if(!oObj) return;
        var oItems=oObj.getElementsByTagName("li");
        if(!oItems) return;
   
        var iKeyCode, iPos=oSuggestionBox._position;
        if(window.event){iKeyCode=window.event.keyCode;}
        else if(e.which){iKeyCode=e.which;}
        if(iKeyCode!=40 && iKeyCode!=38) return;//不是向上或向下方向键时
//alert('向上或向上方向键?');
        if(iKeyCode==40){//向下方向键
            iPos++;
            if(iPos>=oItems.length){iPos=0;}
        }
        if(iKeyCode==38){//向上方向键
            iPos--;
        
            if(iPos<0){iPos=oItems.length-1;}
        }
        oSuggestionBox._position=iPos;
        oSuggestionBox._setStyle();
        if(iPos>=0 && iPos<oItems.length){oSearchBox.value=oItems[iPos].childNodes[0].nodeValue;}
        else{$(a_sSearchBoxId).value=oSuggestionBox._suggestion;}
    };
    oSearchBox.onkeyup=function(e){
        var iKeyCode;
        if(window.event){iKeyCode=window.event.keyCode;}
        else if(e.which){iKeyCode=e.which;}
        if(iKeyCode!=40 && iKeyCode!=38){//非向上或向下键
            oSuggestionBox._getSearchResult(a_sSearchBoxId);
            oSuggestionBox._suggestion=oSearchBox.value;
        }
    };
    oSearchBox.onclick=function(e){
        var iKeyCode;
        if(window.event){iKeyCode=window.event.keyCode;}
        else if(e.which){iKeyCode=e.which;}
        if(iKeyCode!=40 && iKeyCode!=38){
            oSuggestionBox._getSearchResult(a_sSearchBoxId);
            oSuggestionBox._suggestion=oSearchBox.value;
        }
    };
}
function TSuggestionBox_GetSearchResult(a_sSearchBoxId){//获取搜索结果
    var oBox=this._boxes[a_sSearchBoxId], oSuggestionBox=this._object, oHttpRequest;
    var iPos=this._position;
    if(!oBox) return;
    try{oHttpRequest=new XMLHttpRequest();}
    catch(e){oHttpRequest=new ActiveXObject("Microsoft.XMLHTTP");}
    oHttpRequest.onreadystatechange=function(){
        if (oHttpRequest.readyState==4){
            if (oHttpRequest.status==200){
                var sResult=oHttpRequest.responseText;
                $(oBox[0]).innerHTML=sResult;
                if(sResult) {
                   oSuggestionBox._position=0;
                   oSuggestionBox._listenItem(a_sSearchBoxId);//监听suggestionBox中的选项
                }
            }
        }
    }
    oHttpRequest.open("post", oBox[1], true);
    oHttpRequest.setRequestHeader('Content-type','application/x-www-form-urlencoded');
    oHttpRequest.send("keyword="+escape($(a_sSearchBoxId).value));
}
function TSuggestionBox_SetStyle(){//设置建议提示框的样式
    var oNodes=$$("li"), oNode;
    var iPos=this._position;
    for(var i=0;i<oNodes.length;i++){
        oNode=oNodes[i];
        oNode.className="";
    }
    if(iPos>=0 && iPos<oNodes.length){
        oNode=oNodes[iPos];
        oNodes[iPos].className="select";
    }
}
//隐藏建议提示框
function TSuggestionBox_Clear(a_sID){this._boxes[a_sID].innerHTML="";}
function TSuggestionBox_ListenItem(a_sSearchBoxId) {//监听SuggestionBox Item
    var oBox=this._boxes[a_sSearchBoxId];
    var oSuggestionBox=this._object;
    var iPos=this._position;
    var sFormId="";
    if(!oBox) return;
    var oObj=$(oBox[0]);
   
    if(!oObj) return;
    if(oBox.length>2) sFormId=oBox[2];
    var oItems=oObj.getElementsByTagName("li");
    if(!oItems) return;
    var oItem;
    for(var i=0;i<oItems.length;i++) {
        oItem=oItems[i];
        if(!oItem) continue;
      
        oItem.onclick=function (){//提交搜索表单
            var iPos=oSuggestionBox._position;
            var oForm=$F(sFormId);
            if(!oForm) return;
            oForm.submit();
        };
        oItem.onmouseover=function() {
            oSuggestionBox._position=this.value;
            oSuggestionBox._setStyle();
            $(a_sSearchBoxId).value=this.childNodes[0].nodeValue;
        };
      
    }
    if(oItems.length>0) oItems[0].className="select";
}

时间: 2024-10-30 10:48:04

模仿Google的搜索提示框的相关文章

AJAX 防google 的Suggest提示框

AJAX 防google 的Suggest提示框 在HTML表单 这是HTML网页.它包含一个简单的HTML表格,并链接到一个JavaScript : <html> <head> <script src="clienthint.js"></script> </head> <body> <form> First Name: <input type="text" id="

js搜索提示框用什么触发事件

问题描述 js搜索提示框用什么触发事件 找了一个jquery的框架,但是发现没有从后台获取数据,然后自己改了一下,后来就是我只要按键了,就会去请求一次,我又给加了中文正则,结果我不输入,按上下键选择也会触发keyup事件,怎么才能给它去掉,就是我输入的时候才会触发,而不是我随意按一下按键就触发了,如图,拿到数据,我只是按上下键选择,然后还在请求后台 解决方案 问题以解决,还是用得keyup事件,不过限制了keyCode,就是当用户按上,下键选择的时候直接return不再请求后台了.还是谢谢了 解

ajax Suggest类似google的搜索提示效果_AJAX相关

实现: <script type="text/javascript" src="/path/to/SuggestFramework.js"></script> <script type="text/javascript">window.onload = initializeSuggestFramework;</script> 有了上面两句后,每个取了名的文本框会多出五个属性: 1.action 必须

ajax Suggest类似google的搜索提示效果

实现: <script type="text/javascript" src="/path/to/SuggestFramework.js"></script> <script type="text/javascript">window.onload = initializeSuggestFramework;</script> 有了上面两句后,每个取了名的文本框会多出五个属性: 1.action 必须

asp+ajax仿google搜索提示效果代码_应用技巧

对于更完整的代码可以参考,这个是支持数据库的版本.经过编辑测试.Asp+Ajax仿google搜索提示效果 数据库版需要修改的地方有 复制代码 代码如下: javascript.js var url="ajax.asp"; //后台地址 var time_delayajax=300; //搜索延迟 var time_delayupdown=100; //方向键延迟 obj_div.style.top = (xtop + 20) + "px"; //20差不多是输入框

asp+ajax仿google搜索提示效果代码

对于更完整的代码可以参考,这个是支持数据库的版本.经过脚本之家编辑测试. Asp+Ajax仿google搜索提示效果 数据库版 需要修改的地方有 复制代码 代码如下: javascript.js var url="ajax.asp"; //后台地址 var time_delayajax=300; //搜索延迟 var time_delayupdown=100; //方向键延迟 obj_div.style.top = (xtop + 20) + "px"; //20差

Android--多选自动搜索提示

  一. 效果图 常见效果,在搜素提示选中之后可以继续搜索添加,选中的词条用特殊字符分开   二. 布局代码 <MultiAutoCompleteTextView android:id="@+id/autoMulti" android:layout_width="match_parent" android:layout_height="60dp" android:layout_marginTop="50dp" />

模仿google搜索下拉框

提示:您可以先修改部分代码再运行 (eg. ShanDong) 模仿google搜索下拉框,免费空间,免费asp空间,免费域注册 提示:您可以先修改部分代码再运行

仿google搜索提示 SuggestFramework的使用_AJAX相关

一.首先来看一下什么是suggest framework Suggest Framework 故名思意,就是仿 Google Suggest 的一个小框架,让你的文本框也有提示功能.利用suggest framework你可以在自己的网站上很轻松实现"输入提示"效果,这种效果会很大程度上提高用户体验,提高搜索效率. 一个页面上可以出现多个搜索框,每个搜索框都可以实现单独配置. 此框架无浏览器限制,基本兼容当前的绝大多数浏览器,包括Internet Explorer 5+ (Win/Ma