Posted in Javascript onJanuary 19, 2014
/*文本自动补全 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").mouseover(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 });
文本框文本自动补全效果示例分享
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@