基于jquery实现的自动补全功能


Posted in Javascript onMarch 12, 2015

本文实例讲述了基于jquery实现的自动补全功能的方法。分享给大家供大家参考。具体实现方法如下:

$(function() {

    // 自动补全

    var maxcount = 0;// 表示他最大的值

    var thisCount =0;// 初始化他框的位置

    $("body").prepend("<div style='width:120px; display:none; background:#FFFFFF; position: absolute;' id='autoTxt'></div>");

    $("#sele").keyup(function(even) {

        var v = even.which;

        if (v == 38 || v == 40 || v == 13)// 当点击上下键或者确定键时阻止他传送数据

            {

            return;

            }

        var txt = $("#sele").val();//这里是取得他的输入框的值

        if (txt != "") {

            //拼装数据

            $.ajax({

                url : "Birthday_autoCompletion",//从后台取得json数据

                type : "post",

                dataType : "json",

                data : {"bir.userName" : txt

                },

                success : function(ls) {

                    var offset = $("#sele").offset();

                    $("#autoTxt").show();

                    $("#autoTxt").css("top", (offset.top + 30) + "px");

                    $("#autoTxt").css("left", offset.left + "px");

                    var Candidate = "";

                     maxcount = 0;//再重新得值

                    $.each(ls, function(k, v) {

                        Candidate += "<li id='" +maxcount+ "'>" + v + "</li>";

                        maxcount++;

                    });

                    $("#autoTxt").html(Candidate);

                    $("#autoTxt li:eq(0)").css("background", "#A8A5A5");

                    //高亮对象

                    $('body').highLight();

                    $('body').highLight($("#sele").val());

                    event.preventDefault();

                        //当单击某个LI时反映

                        $("#autoTxt li").click(function(){

                            $("#sele").val($("#autoTxt li:eq("+this.id+")").text());

                            $("#autoTxt").html("");

                            $("#autoTxt").hide();

                        });

                        //移动对象

                        $("#autoTxt li").hover(function(){

                            $("#autoTxt li").css("background", "#FFFFFF");

                            $("#autoTxt li:eq("+this.id+")").css("background", "#A8A5A5");

                            thisCount=this.id;},function(){

                                $("#autoTxt li").css("background", "#FFFFFF");});

                },

                error : function() {

                    $("#autoTxt").html("");

                    $("#autoTxt").hide();

                    maxcount = 0;

                }

            });

        } else {

            $("#autoTxt").hide();

            maxcount = 0;

            $("#sestart").click();

        }

    });

    //当单击BODY时则隐藏搜索值

    $("body").click(function(){

        $("#autoTxt").html("");

        $("#autoTxt").hide();

        thisCount=0;

    });

    // 写移动事件//上键38 下键40 确定键 13

    $("body").keyup(function(even) {

        var v = even.which;

            if (v == 38)// 按上键时

            {

                if(thisCount!=0){//等于零时则证明不能上了。所以获得焦点

                    $("#sele").blur();

                    if(thisCount>0)

                        --thisCount;

                    else

                        thisCount=0;

                $("#autoTxt li").css("background", "#FFFFFF");

                $("#autoTxt li:eq("+thisCount+")").css("background", "#A8A5A5");

                }else{$("#sele").focus();}

            } else if (v == 40) {// 按下键时

                if(thisCount<maxcount-1)

                {

                    $("#sele").blur();

                    ++thisCount;

                    $("#autoTxt li").css("background", "#FFFFFF");

                    $("#autoTxt li:eq("+thisCount+")").css("background", "#A8A5A5");

                }

            } else if (v == 13) {// 按确认键时

                var tt=$("#"+thisCount).text();

                if(tt!="")

                    {

                        $("#sele").val(tt);

                        $("#autoTxt").html("");

                        $("#autoTxt").hide();

                    }else

                    {

                        if($("#sele").val()!="")

                        $("#sestart").click();

                    }

            } else {

                if($("#autoTxt").html()!="")

                    {

                        $("#sele").focus();

                        thisCount=0;

                    }

            }

    });

});

希望本文所述对大家的jQuery程序设计有所帮助。

Javascript 相关文章推荐
javascript cookies操作集合
Apr 12 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
Jan 13 Javascript
jQuery晃动层特效实现方法
Mar 09 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
Mar 12 Javascript
JavaScript弹窗基础篇
Apr 27 Javascript
简单的JS轮播图代码
Jul 18 Javascript
JavaScript函数表达式详解及实例
May 05 Javascript
react-native 完整实现登录功能的示例代码
Sep 11 Javascript
Vue.js 父子组件通信的十种方式
Oct 30 Javascript
深入了解JavaScript 防抖和节流
Sep 12 Javascript
通过js随机函数Math.random实现乱序
May 19 Javascript
vue watch监控对象的简单方法示例
Jan 07 Vue.js
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
Mar 12 #Javascript
window.open()实现post传递参数
Mar 12 #Javascript
js运动动画的八个知识点
Mar 12 #Javascript
js实现最短的XML格式化工具实例
Mar 12 #Javascript
微信中一些常用的js方法汇总
Mar 12 #Javascript
javascript实现checkBox的全选,反选与赋值
Mar 12 #Javascript
jQuery通过扩展实现抖动效果的方法
Mar 11 #Javascript
You might like
php文件夹与文件目录操作函数介绍
2013/09/09 PHP
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
postfixadmin忘记密码后的修改密码方法详解
2016/07/20 PHP
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
jquery 判断滚动条到达了底部和顶端的方法
2014/04/02 Javascript
AngularJS语法详解
2015/01/23 Javascript
javascript实现验证IP地址等相关信息代码
2015/05/10 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
vue源码入口文件分析(推荐)
2018/01/30 Javascript
基于vue 添加axios组件,解决post传参数为null的问题
2018/03/05 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
详解JavaScript执行模型
2020/11/16 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
Python合并字符串的3种方法
2015/05/21 Python
python中input()与raw_input()的区别分析
2016/02/27 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
实例详解Python装饰器与闭包
2019/07/29 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
Pycharm添加虚拟解释器报错问题解决方案
2020/10/13 Python
Python如何急速下载第三方库详解
2020/11/02 Python
产品工艺师的岗位职责
2013/11/15 职场文书
霸王洗发水广告词
2014/03/14 职场文书
婚前协议书怎么写
2014/04/15 职场文书
教师节班会开场白
2015/06/01 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android