基于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跨域刷新实现代码
Jan 01 Javascript
JavaScript中instanceof运算符的用法总结
Nov 19 Javascript
jQuery中unwrap()方法用法实例
Jan 16 Javascript
Javascript核心读书有感之语言核心
Feb 01 Javascript
javascript中字体浮动效果的简单实例演示
Nov 18 Javascript
JS中对象与字符串的互相转换详解
May 20 Javascript
谈谈JavaScript中的几种借用方法
Aug 09 Javascript
js中DOM三级列表(代码分享)
Mar 20 Javascript
iconfont的三种使用方式详解
Aug 05 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
Dec 10 Javascript
加快Vue项目的开发速度的方法
Dec 12 Javascript
mpvue实现微信小程序快递单号查询代码
Apr 03 Javascript
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 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
详解PHP的Yii框架的运行机制及其路由功能
2016/03/17 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
2012/12/11 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
详解nodejs与javascript中的aes加密
2016/05/22 NodeJs
深入浅析knockout源码分析之订阅
2016/07/12 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
原生js封装添加class,删除class的实例
2017/11/06 Javascript
Mint UI 基于 Vue.js 移动端组件库
2017/11/07 Javascript
使用Angular CLI生成 Angular 5项目教程详解
2018/03/18 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
[59:07]海涛为你详解DOTA2新版本“贤哲秘契”
2014/11/22 DOTA
基于python的汉字转GBK码实现代码
2012/02/19 Python
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
Unicode和Python的中文处理
2017/03/19 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
Django 自动生成api接口文档教程
2019/11/19 Python
python装饰器代替set get方法实例
2019/12/19 Python
python str字符串转uuid实例
2020/03/03 Python
Rakuten Kobo台湾:电子书、eReaders和Reading应用程式
2017/11/24 全球购物
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
市场部管理制度
2014/02/02 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
党员个人总结范文
2015/02/14 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android