autoComplete实现的输入下拉联想功能

下拉联想 类似与百度的搜索关键词联想功能。用户在输入框中输入关键字后,会出现与其相关的下拉选项供用户选择;从而提高用户体验。

而下拉选项与关键字的匹配关系,根据不同的产品、需求,有不同的实现。如根据热度、相关度、字符匹配度等等。而我在项目中实际用到的是jquery UI的autoComplete 小部件(widgets)来实现。

 

使用方法:引用jquery、jquery UI; $(xx).autocomplete(类似ajax格式的配置项);

关于具体的配置项参考API----http://www.jqueryui.org.cn/api/3746.html

 

 

autoComplete 比较轻量,它的关联过滤匹配是根据字符串匹配的,并且过滤的实现均在前端。所以autoComplete 需要先给前端赋值(无论是本地数据还是远程数据)。这就决定了它只适用与数据量比较小的场景。数据量过大导致关键字匹配卡顿,影响体验。(体现复杂运算在后端的原则)

 

autoComplete 主要是整合了input 与下拉框,下拉的数据源可以是数组、json字符串(返回json的url)、和包含了request、responce处理数据的Function。使用autoComplete 的基本要素为source、select、minLength;具体的demo可以查看上面的地址。代码没有太多技术含量;唯熟API 则耳!

以下为实际项目中的代码:source 选择数据比较稳妥,先在$(function()) 用ajax获取后台数据,构建数组。select配置项用于定义选择选项时的代码处理。

 

var dataAarr = new Array();

               $.ajax({
                      url: "url",
                      dataType: "jsonp",
                      jsonp:'callback',  
                      jsonpCallback:"successCallback",
                         
                      success: function( json ) {
                          var data = eval(json);
                          // alert(data[0].DWMC);
                           for (var i = 0; i < data.length; i++) {
                               dataAarr[i] = data[i].DWMC;
                           }
                      }
                      
                });

               
                $("#tags1").autocomplete({
                  source: dataAarr,
                  select: function( event, ui ) {
                                // alert($("#tags1").val());
                                var l = ui.item.value;
                                // alert(l);
                                $.ajax({
                                    url: "http://127.0.0.1:8080/fuwuguanlixitong/weiXinRuZhuAction/getDanWeiXinXi_Single?DWMC="+l+"",
                                    dataType: "jsonp",
                                    jsonp:'callback',  
                                    jsonpCallback:"successCallback",

                                    success:function(json){
                                        var data = eval(json);
                                       //数据处理代码
                                    }
                                });
                                
                            }
                });

 

 

举一反三:在前端整合了input和select的情况下;利用ajax实现输入下拉联想的功能。思路:事件监听取关键字,后台处理数据返回,前端显示。

把数据过滤放在后端,可以按需过滤数据、匹配数据;增加灵活性同时适用数据量大的场景。

 

 

 

 

 

posted @ 2017-10-23 21:57  你七啊?  阅读(1240)  评论(0编辑  收藏  举报