当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 文本框文本自动补全效果示例分享

文本框文本自动补全效果示例分享

2019年03月21日  | 移动技术网IT编程  | 我要评论

代码如下:


/*文本自动补全 zhouxiang*/

 

(function ($) {
    $.completion = function (setting) {
        var opts = $.extend({}, $.completion.defaultsetting, setting);
        //宽度
        var completion_width = null;
        //高度
        var completion_height = null;
        //数据源(ashx)访问路径
        var completion_data_url = null;
        //对象
        var completion_obj = null;
        var completion_obj_show = null;
        //对象距离左边距
        var completion_obj_marginleft = null;
        //对象距离上边距
        var completion_obj_margintop = null;
        //对象高度
        var completion_obj_height = null;
        //分类
        var completion_count = null;
        //
        var completion_type_obj = null;
        //内容
        var completion_value = null;
        //类型
        var completion_type = null;
        //是否传入类型
        var completion_bool = false;
        //计数
        var completion_n = 0;
        //回车回调
        var completion_clickcall = null;
        //加载
        function completion_loading() {
            //初始化
            init();
            //绑定事件
            completion_obj_addevent();
        }
        //初始化
        function init() {
            completion_obj_show = opts.completion_obj_show;
            //获取对象
            completion_obj = opts.completion_obj;
            //获取对象宽度
            completion_width = completion_obj.width();
            //获取层显示高度
            completion_height = opts.completion_height;
            //获取访问url
            completion_data_url = opts.completion_data_url;
            //每次查询多少条记录
            completion_count = opts.completion_count;
            //获取对象高度
            completion_obj_height = completion_obj.height();
            //获取左边距
            completion_obj_marginleft = completion_obj.offset().left;
            //获取上边距
            completion_obj_margintop = parseint(completion_obj.offset().top) + parseint(completion_obj_height);
            completion_type_obj = opts.completion_type_obj;
            completion_bool = opts.completion_bool;
            completion_clickcall = opts.completion_clickcall;
        }
        //给对象添加事件
        function completion_obj_addevent() {
            completion_obj.keyup(function (event) {
                switch (event.keycode) {
                    case 38:
                        break;
                    case 40:
                        break;
                    case 13:
                        completion_clickcall();
                        break;
                    default:
                        //按键事件 延迟操作

                        cimpletion_bind();
                        break;
                }

            });
            completion_obj.keydown(function (event) {
                switch (event.keycode) {
                    case 13:
                        break;
                    case 38:
                        if (completion_n == 0) {
                            completion_n = (completion_obj_show.find("li").length - 1);
                        } else if (completion_n != 0) {
                            completion_n = completion_n - 1;
                        }
                        //alert(completion_n);
                        completion_obj_show.find("li").find("a").removeclass("completion-guess-list-hover");
                        completion_obj_show.find("li").eq(completion_n).find("a").addclass("completion-guess-list-hover");
                        completion_obj.val(completion_obj_show.find("li").eq(completion_n).find("ul").text());


                        break;
                    case 40:
                        if (completion_n + 1 < completion_obj_show.find("li").length) {
                            completion_n = completion_n + 1;
                        } else if (completion_n + 1 == completion_obj_show.find("li").length) {
                            completion_n = 0;
                        }
                        completion_obj_show.find("li").find("a").removeclass("completion-guess-list-hover");
                        completion_obj.val(completion_obj_show.find("li").eq(completion_n).find("ul").text());
                        completion_obj_show.find("li").eq(completion_n).find("a").addclass("completion-guess-list-hover");

                        break;
                    default:
                        break;

                }
            });
        }
        //绑定方法
        function cimpletion_bind() {
            //是否开启类型判断
            if (completion_bool) {
                completion_type = completion_type_obj.val();
            }
            completion_value = completion_obj.val();
            completion_value = completion_value.replace(" ", "");
            //执行验证
            completion_verification(completion_value);
            if (completion_value.length > 1) {
                //得到数据 构造html
                completion_data_bind();
            } else {
                completion_obj_show.hide();
            }
        }
        //验证
        function completion_verification(obj) {
            if (obj == "" || obj == null || obj == undefined) {
                return false;
            }
        }
        //执行ajax请求 得到数据
        function completion_data_bind() {
            $.ajax({
                url: completion_data_url,
                data: { completionvalue: completion_value, completioncount: completion_count, completiontype: completion_type },
                type: "post",
                datatype: "json",
                success: function (obj) {
                    //构造html
                    completion_add_html(obj);
                }
            });
        }
        //选中
        function completion_selected(obj) {
            completion_obj.val(obj.find("ul").text());
            completion_obj_show.hide();
        }
        //构造内容
        function completion_add_html(obj) {
            var data = obj.completion_data;
            //执行验证
            completion_verification(data);
            var completion_li = "";
            if (data != null && data != undefined) {
                for (var i = 0; i < data.length; i++) {
                    //执行验证是否为空
                    var dr = data[i];
                    completion_verification(dr);
                    var completionname = dr.completion_name;

                    completionname = completionname.replace(completion_value.touppercase(), "<span class='c-hover'>" + completion_value.touppercase() + "</span>");
                    completion_li += "<li><a href='javascript:;'><span class='c-total'>约" + dr.completion_count + "条记录</span><ul>" + completionname + "</ul></a></li>";
                }
                if (completion_li != "") {
                    var completion_html = "<ul style='list-style-type:none;'>" + completion_li + "</ul>";
                    completion_obj_html(completion_html);
                } else {
                    completion_obj_show.hide();
                }
            }
        }
        //mouse
        function mousehover(obj) {
            completion_obj_show.find("li").mouver(function () {
                completion_obj_show.find("li").find("a").removeclass("completion-guess-list-hover");
                completion_obj.val($(this).find("ul").text());
                completion_n = completion_obj_show.find("li").index(this);
            });
        }
        //绑定到控件
        function completion_obj_html(html) {
            completion_obj_show.show();
            completion_obj_show.html("")
            completion_obj_show.css({ "width": completion_width + 6, "height": completion_height, "border-width": "1px", "border-color": "#ccc", "border-top-width": "0px", "border-style": "solid", "position": "relative", "z-index": "100000" });
            completion_obj_show.attr("class", "completion-guess-list");
            completion_obj_show.html(html);
            completion_n = -1;
            completion_obj_show.find("li").unbind("click").click(function () {
                completion_selected($(this));
            });
            mousehover($(this));
            completion_obj_show.click(function (e) {
                e.stoppropagation();
            })
            completion_obj.click(function (e) {
                cimpletion_bind();
                e.stoppropagation();
            });
            $(document).click(function () {
                completion_obj_show.hide();
            });
        }
        //加载
        completion_loading();
    };
    //默认配置
    $.completion.defaultsetting = {
        completion_height: null,
        completion_data_url: null,
        completion_obj: null,
        completion_obj_show: null,
        completion_bool: false,
        completion_count: 10,
        completion_type_obj: null,
        completion_clickcall: null
    };

})(jquery);

 

 

. 代码如下:


body
{
      margin: 0;
    padding: 0;
    }
.completion-guess-list ul, li
{
    margin: 0;
    padding: 0;
    list-style:none;
}
.completion-guess-list
{
    overflow: auto;
    font-size: 12px;
    line-height: 180%;
    background: #fff;
}
.completion-guess-list a
{
    color: #555;
    text-decoration: none;
    display: block;
    padding: 1px 6px;
    overflow: hidden;
    white-space: nowrap;
    font-family:verdana,arial;
}
.completion-guess-list a .c-total{float:right;color:green;}
.completion-guess-list a:hover,.completion-guess-list a.completion-guess-list-hover
{
    background: #3399ff;
    color: #fff;
}
.completion-guess-list a:hover span.c-total,.completion-guess-list a.completion-guess-list-hover span.c-total{color:#fff;}
.completion-guess-list .c-hover{font-weight:700;}

 

 

. 代码如下:


$.completion({ completion_obj: $("#input_html"), completion_data_url: "/completionhandler.ashx", completion_height: "auto", completion_obj_show: $("#show"), completion_bool: true, completion_type_obj: $("#type"), completion_clickcall: function () { alert(1); }, completion_length: 0 });

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网