六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 113|回复: 0

仿Google自动补全 jQuery 不含索引处理

[复制链接]

升级  96%

10

主题

10

主题

10

主题

童生

Rank: 1

积分
48
 楼主| 发表于 2013-2-7 22:25:32 | 显示全部楼层 |阅读模式
自动补全

1. 页面有一个文本框,一个自动提示层,一个按
 
<script type="text/javascript" src="../js/jquery-1.3.2.js"></script><script type="text/javascript" src="../js/autoComplete.js"></script><div style="text-align: left; width: 500px;"><input type="text" id="key" style="width: 400px;height:25px;" /><input type="button" id="commit" style="background-color:#1874CD;width:70px;height:25px;border:0px;color:#ffffff;" value=" 提 交 "/><div id="autoKey"></div></div> 
自动提示JavaScript…

//页面加载好,autoKey应该隐藏$(document).ready(function(){    //定义高亮变量,控制上下键的选择    //-1代表不高亮任何行    var highlightindex = -1;    //提示层的子层数组    var completesVal;//将要显示的提示var keys;    //时间延迟对象    var timeDelay;    //获得输入input的对象    var keyInput=$("#key");    var keyInputOffset=keyInput.offset();    var autoDiv=$("#autoKey");    //提示层的样式    autoDiv.hide().css("border","1px solid #999999").css("position","absolute")            .css("top",keyInputOffset.top + keyInput.height() + 8 + "px")            .css("left",keyInputOffset.left + "px").width(keyInput.width() + 6)            .css("color","#aaaaaa").css("z-index","10").css("background-color","#FFFFFF");        //按键按下后与服务器的交互    keyInput.keyup(function(event){                //获取键盘事件对象        var keyEvent=event || window.event;        //判断键盘输入的值得范围        //1.输入的是正常的字母        //2.向上向下键        //3。回车键        var keyCode=keyEvent.keyCode;        if(keyCode !=38 && keyCode !=40 && keyCode != 13){            //获取当前文本框中的值            var currentVal=keyInput.val();            //如果当前的文本框内容为空,就不在向服务器发送请求            if(currentVal != ""){                //取消上次提交                window.clearTimeout(timeDelay);                //延迟500ms提交,防止频繁提交                timeDelay=window.setTimeout(function(){                    $.post("../ParseParam",{paramInfo:currentVal},function(data){ //清空autoDiv的内容并且隐藏                    autoDiv.html("");                                        //对回传的数据抽取,组成一个key的数组                    keys=$(data).find("key");                    keys.each(function(){                        var keyval=$(this).text();                                                if(keyval !=null){                        $("<div>").css("font-size","13px").css("height","18px").css("padding-top","1px").html(keyval).appendTo(autoDiv);}                    });                    if(keys.length>0){                        //为提示加上鼠标的选择功能                        //鼠标over||out会触发事件,并高亮                        //单击高亮层关闭提示层,并且把值传给文本框                        completesVal=autoDiv.children("div");                        //鼠标一移到autoKey上面,上下键的选择就取消                        autoDiv.mouseover(function(){                            //highlightindex不等于-1说明先前用上下键移动过                            if(highlightindex != -1){                                //定位到那个节点,取消其高亮                                completesVal.eq(highlightindex).css("background-color","white").css("color","#aaaaaa");                                //highlightindex = -1;                                highlightindex = -1;                            }                        });                        completesVal.each(function(){                            var t=$(this);                            t.css("cursor","pointer").mouseover(function(){                                //加上mouseover事件                                t.css("background-color","#7EC0EE").css("color","#000000");                            }).mouseout(function(){                                //mouseout事件                                t.css("background-color","white").css("color","#aaaaaa");                            }).click(function(){                                //单击事件                                keyInput.val(t.text());                                autoDiv.hide();                            });                        });                        highlightindex = -1;                        autoDiv.show();                    }else{                        highlightindex = -1;                        autoDiv.hide();                    }                },"xml");                },500);            }                }else if(keyCode == 38 || keyCode ==40 || keyCode == 13){            //第一步先获得提示框里所有补全信息的数组            // var completesVal=$("#autoKey").children("div");考虑到效率,把这步放到全局            //向下键的控制            if(keyCode == 40){                //如果现在的高亮是存在的,那么我们就要移动highlightindex                if(highlightindex != -1){                    //去掉当前高亮                    completesVal.eq(highlightindex).css("background-color","white").css("color","#aaaaaa");                }                //移动高亮的指针,                //注意这里的highlightindex++一定要放在if的外面,                // 放在里面如果hightlightindex=-1,则永远也移动不了                highlightindex++;                //判断是否到了最后一个元素                if(highlightindex == completesVal.length){                    highlightindex = 0;                }                //高亮当前highlightindex节点                completesVal.eq(highlightindex).css("background-color","#7EC0EE").css("color","#000000");            }            //向上键的控制            if(keyCode == 38){                if(highlightindex != -1){                    completesVal.eq(highlightindex).css("background-color","white").css("color","#aaaaaa");                    highlightindex--;                }                if(highlightindex ==-1){                    highlightindex=completesVal.length;                }                 //高亮当前highlightindex节点                completesVal.eq(highlightindex).css("background-color","#7EC0EE").css("color","#000000");            }            //enter键的控制            //1.按下enter键,把提示的值传给文本框            //2.关闭提示层            //3.提交            if(keyCode == 13){                                if(highlightindex != -1){                    //获取当前高亮值                    var comsVal = completesVal.eq(highlightindex).text();                                       //给文本框赋值                    keyInput.val(comsVal);                    //高亮索引回归到初始化                    highlightindex = -1;                    //隐藏提示框                    autoDiv.hide();                }else{                                        commitSearch();                    //文本框失去焦点,不然按回车会不停的发出请求                    keyInput.get(0).blur();                    autoDiv.hide();                }            }        }    });    //提交按钮的事件    var commitBtn=$("#commit");    //commitBtn的click事件    commitBtn.click(commitSearch);    //提交函数     function commitSearch(){        var cv=keyInput.val();        //cv=encodeURIComponent(cv);        window.location.href="../SearchIndex?paramInfo="+cv;       // $.get("../SearchIndex",{paramInfo:cv});            }    //keyInput失去焦点后关闭提示层    //keyInput.blur(function(){        //autoDiv.hide();        //highlightindex = -1;   // });});
 


 

 
后面的一部分被截断了,可以到我的首页,有续。。

您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表