javascript 自定义auto_complete

简介:

ys_auto_complete.css

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
.ys-auto-complete{
     position : absolute ;
     display : none ;
     list-style-type none ;
     padding : 0 ;
 
     border : 1px  solid  #ccc ;
     margin : 0 ;
     background-color : #fff ;
     z-index : 999 ;
 
}
 
.ys-auto-complete li{
     height : 32px ;
     line-height 32px ;
     font-size : 14px ;
     color : #222 ;
     padding-left : 10px ;
}
 
.ys-auto-complete li:hover{
     background-color : #eaeaea ;
     cursor pointer ;
}

ys_auto_complete.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
( function ($){
 
     var  defaultSettings = {
         loadSource: function (keyWord,callback){  //
             //var data = [];
             //callback(this,data);
         }
     };
 
     function  refreshAutoComplete(target,list){
         if (list== null ||list.length==0){
             return ;
         }
         var  ys_auto_complete_id = $(target).attr( "ys_auto_complete" );
         var  container = $( "#" +ys_auto_complete_id);
         var  html =  "" ;
         // render the data
         list.forEach( function (item){
             var  name = item.name;
             var  value = item.value;
             html += "<li value='" +value+ "'>" +name+ "</li>" ;
         });
         container.html(html);
 
         // 计算auto_complete 坐标位置
         var  top = $(target).offset().top+$(target).outerHeight()+1;
         var  left = $(target).offset().left;
 
         container.css({
             "left" :left+ "px" ,
             "top" :top+ "px"
         });
 
         var  ys_auto_complete_id = $(target).attr( "ys_auto_complete" );
         $( "#" +ys_auto_complete_id).show();
     }
 
     var  renderHtml =     "<ul class='ys-auto-complete'></ul>" ;
 
 
     function  renderAutoComplete(target,settings){
         var  id =  "ys_auto_complete_" + new  Date().getTime()+ "" +parseInt(Math.random()*10000);
         $(target).attr( "ys_auto_complete" ,id);
         $(renderHtml).attr( "id" ,id).appendTo( "html" );  // 添加到文档中去
 
 
         var  container = $( "#" +id);
 
         var  width = $(target).outerWidth();
 
         container.css({
             "width" :width+ "px"
         });
 
         return  container;
     }
 
 
     function  bindEventHandlers(target,container,settings){
         var  timeout =  null ;
 
         var  loadSource = settings.loadSource;
 
         // 目标输入框键盘keypress事件
         $(target).on( "keydown" , function (e){
             e.stopPropagation();
             clearTimeout(timeout);
             console.log( "-------------------------" );
             timeout = setTimeout( function (){
                // load the data from backend
                 var  keyWord = $(target).val();
                 loadSource.call(target,keyWord,refreshAutoComplete);
             },300);
         });
 
         // 点击空白区域 隐藏 auto_complete
         $(document).on( "click" , function (e){
             e.preventDefault();
             $( ".ys-auto-complete" ).hide();
         });
 
         // 点击输入框 auto_complete 不隐藏
         $(target).on( "click" , function (e){
             e.stopPropagation();
             e.preventDefault();
         });
 
         // auto_complete item click 事件
         $(container).on( "click" , "li" , function (e){
             e.stopPropagation();
             e.preventDefault();
             var  value = $( this ).attr( "value" );
             var  name = $( this ).html( "name" );
 
             $(target).val(value);
             $(container).hide();
         });
 
     }
 
 
 
     var  options = {
         ysAutoComplete: function (settings) {
             var  mergedSettings = {};
             $.extend(mergedSettings,defaultSettings,settings);
 
             $( this ).each( function (){
                 var  container = renderAutoComplete( this ,mergedSettings);
 
                 bindEventHandlers( this ,container,mergedSettings);
             });
         }
     };
     $.fn.extend(options);
})(jQuery);

ys_auto_complete_demo.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html>
< html >
< head  lang = "en" >
     < meta  charset = "UTF-8" >
     < title ></ title >
     < link  rel = "stylesheet"  href = "../static/css/ys_ui_plugin/ys_auto_complete.css" >
 
     < script  src = "../static/dist/js/jquery-1.11.3.min.js" ></ script >
     < script  src = "../static/js/ys_ui_plugin/ys_auto_complete.js" ></ script >
</ head >
< body >
     < input  type = "text" />
 
 
 
< script >
     $("input").ysAutoComplete({
             loadSource:function(keyWord,callback){
                 var data = [
                                 {value:"app",name:"Apple"},
                                 {value:"bna",name:"Banana"},
                                 {value:"org",name:"Orange"}
                             ];
                 var that = this;
 
                 callback(that,data);
             }
     });
</ script >
</ body >
</ html >

wKiom1c9Ivygb1pwAAET2DL_a4Y512.jpg


 本文转自 antlove 51CTO博客,原文链接:http://blog.51cto.com/antlove/1774972


相关文章
|
5月前
|
开发框架 前端开发 JavaScript
在Vue&Element前端项目中,使用FastReport + pdf.js生成并展示自定义报表
在Vue&Element前端项目中,使用FastReport + pdf.js生成并展示自定义报表
|
7月前
|
前端开发 JavaScript
使用JavaScript实现复杂功能:构建一个自定义的拖拽功能
使用JavaScript实现复杂功能:构建一个自定义的拖拽功能
|
4月前
|
存储 前端开发 JavaScript
javascript 异常问题之为自定义异常提供丰富的上下文信息如何实现
javascript 异常问题之为自定义异常提供丰富的上下文信息如何实现
|
2月前
|
移动开发 JavaScript 前端开发
原生js如何获取dom元素的自定义属性
原生js如何获取dom元素的自定义属性
64 4
|
4月前
|
前端开发 程序员
HTML+CSS+JavaScript制作动态七夕表白网页(含音乐+自定义文字)
一年一度的520情人节/七夕情人节/女朋友生日/程序员表白,是不是要给女朋友或者正在追求的妹子一点小惊喜呢,今天这篇博客就分享下前端代码如何实现HTML+CSS+JavaScript制作七夕表白网页(含音乐+自定义文字)。赶紧学会了,来制作属于我们程序员的浪漫吧!
96 0
HTML+CSS+JavaScript制作动态七夕表白网页(含音乐+自定义文字)
|
5月前
|
JavaScript NoSQL Serverless
函数计算产品使用问题之如何创建一个自定义运行时并指定Node.js版本
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
4月前
|
前端开发 微服务 API
微服务浪潮下的JSF革新:如何在分散式架构中构建统一而强大的Web界面
【8月更文挑战第31天】随着微服务架构的兴起,企业将应用拆分成小型、独立的服务以提高系统可维护性和可扩展性。本文探讨如何在微服务架构下构建和部署JavaServer Faces (JSF) 应用,通过RESTful服务实现前后端分离,提升灵活性和适应性。
61 0
|
4月前
|
JavaScript 前端开发 数据安全/隐私保护
Vue.js 表单处理技巧大揭秘!v-model 与自定义验证综合运用,打造高效表单处理体验!
【8月更文挑战第31天】Vue.js 是一款备受欢迎的前端框架,其表单处理功能强大且灵活。v-model 指令可实现双向数据绑定,简化表单元素值与 Vue 实例数据的同步过程;结合自定义验证规则,则能确保用户输入数据符合特定要求。无论是简单的单字段校验还是复杂的多字段验证,Vue.js 均提供了简洁有效的解决方案,有效提升了表单处理效率及用户体验。通过综合运用 v-model 和自定义验证,开发者能够实时反馈错误信息并控制表单状态,从而增强应用的交互性与可靠性。
59 0
|
4月前
|
JavaScript PHP 开发者
PHP中的异常处理与自定义错误处理器构建高效Web应用:Node.js与Express框架实战指南
【8月更文挑战第27天】在PHP编程世界中,异常处理和错误管理是代码健壮性的关键。本文将深入探讨PHP的异常处理机制,并指导你如何创建自定义错误处理器,以便优雅地管理运行时错误。我们将一起学习如何使用try-catch块捕获异常,以及如何通过set_error_handler函数定制错误响应。准备好让你的代码变得更加可靠,同时提供更友好的错误信息给最终用户。
|
5月前
|
开发框架 前端开发 JavaScript
循序渐进BootstrapVue,开发公司门户网站(2)--- 使用wow.js动画组件以及自定义的CSS样式处理动态效果
循序渐进BootstrapVue,开发公司门户网站(2)--- 使用wow.js动画组件以及自定义的CSS样式处理动态效果