bootstrap3-typeahead 自动补全完美使用教程

简介: displayText:直接说就是一个 function,默认为 item.name || item(用于获取从 Source 中得到的信息在字面上显示的内容,这个里面的值如果是有 item.name 属性就显示name属性,如果没有就直接显示 item ),回到Source描述中的 an array of JSON object..... 如果数组里面的数据时一个json,那么这个json必须有一个name属性,所以这个属性完全可以不叫name,甚至可以自己写一个function用于显示displayText

bootstrap3-typeahead 自动补全完美使用教程


这篇文章记录了我在使用typeahead的一些问题,不是很全,但是基本够用。

 

 Bootstrap提供typeahead组件来完成自动补全功能。


20180412224607934.jpg


在做之前,我们先来看看它的选项


一、Source是个啥:


1、Array数组,当然,数组里面是简单的String或者JSOn都无所谓


2、还可以是个function(什么叫还可以是个function),这个source可以是个方法返回回来的(看到这里是不是有那么一点点感觉了),我们想要的是啥,是不是一个Ajax请求,请求到后台,请求返回来的内容作为我们的Source,在Source的Description里看看function有些什么内容,一但看到有function的,一定会告诉我们,这个function有哪些参数。


3、Description中描述的是:

用于查询的数据源:


   (1)、可以是一个String数组


   (2)、也可以是一个JSON数组(注意,这个JSON对象必须有一个叫做name的属性,这个name属性是用于哪里的?是不是应该就是用于显示在自动补全下拉列表中的东西)


   (3)、接着来看,或者是一个function(这个function接收两个参数:第一个value是query--即当前你正在用的查询的值;第二个value是process的callback--回调函数,说明调的是一个方法)


   (4)、如果你是通过异步调用方法返回的数据(我们当前拿数据肯定是异步的),就要把你这个返回的数据作为第二个参数的argument进行调用(这里先卖个关子,欲知详情,请看下面代码)--可能英文文档看着有点懵逼,有些文档类的东西用代码写出来就会一目了然了


4、通过上面的描述信息,我们现在用的肯定是function这种方式


二、Items:


即下拉列表中可以显示的最多数据(即最多显示多少个)


三、minLenght:


最少开始查询的数据(我们肯定需要用到这个东西)


四、displayText:


直接说就是一个 function,默认为 item.name || item(用于获取从 Source 中得到的信息在字面上显示的内容,这个里面的值如果是有 item.name 属性就显示name属性,如果没有就直接显示 item ),回到Source描述中的 an array of JSON object..... 如果数组里面的数据时一个json,那么这个json必须有一个name属性,所以这个属性完全可以不叫name,甚至可以自己写一个function用于显示displayText


五、有了这几个东西就可以开始做了,看着下面的代码也许会更加清楚


六、首先在页面中准备一个input,


<input type="text" class="form-controller id="loginInfoDisplay" autocomplate="off"/>


七、第二再准备一个隐藏域


<input type="hidden" name="loginInfoValue"/>


八、要用这个typeaheader,必须要引入js文件


<script type="text/javascript" src="/js/plugins/bootstrap3-typeahead.min.js"></script>


九、下面是详细实现,每一步都写的很清楚了


十、Methods我们只关心.getActive(就是拿到当前选中的id)    


//自动补全
$("#autocomplate").typeaheader({
  //配置minLength
  minLength:3,//最少输入字符串
  items:8,//最多显示的下拉列表内容
  //1、先配置数据源(可以先不配置数据源,先配置其他东西)
  source:function(query,process){//第一个为正在查询的值,第二个参数为函数(该函数)
    //使用Ajax加载数据源
    $.ajax({
    dataType:"json",
    type:"POST",
    url:"xxx.do",
    //查询的数据(keyword为query)        
    data:{keyword:query},
    //data为一个Json对象的数组
    success:function(data){
      //如果数据有长度,就交给typeaheader显示列表
      if(data && data.length){
          //process为获得数据之后用来调用的方法(方法之后,下拉列表的内容就可以呈现了)
          process(data);
        /*
         *什么地方类似的?
         * 1、Filter:过滤器执行后,要让程序继续往下执行,就要传一个chain进来,调用chain.doFilter()才能往下继续执行
         * 2、AOP:使用Annotation完成spring的aop、around环绕通知,环绕通知方法里第一个参数为proceeding Joinpoint
         * */
      }
    }
  });
  },
  //此时Source就搞定了,但是source的data里面是一个json数组{id:(userId),username:(username)},可以将username改写成name,就万事大吉了
  //如果写的是username,还要提供一个displayText的方法
  //用于告诉typeaheader怎么显示json对象数据
  //function中需要传一个item,该item就是返回回来的一个一个json对象
  displayText:function(item){
      return item.username;
  }
  }).change(function(){
    var current = this.typeaheader("getActive");
    //尝试获取当前选中对象的id   console.debug(current);
    if(current){
      $("#infoValue").val(current.id);
      }
    });
  //此时仍然不能选,因为还没有实现onchange方法(先实现后台的方法)
  $("autocomplate").on("show.bs.dropdown",function(){
    if($("[name=infoDisplay]").val() < 3) return false;
          }
  );


十一、此方法就可以得到选中的那个


var current = $input.typeaheader("getActive);


以上是个人在使用过程中的一点记录,希望对你有所帮助,也希望能对文章中的不当之处进行指正。

目录
相关文章
|
14天前
|
前端开发
Bootstrap 5 保姆级教程(八):卡片 & 下拉菜单
Bootstrap 5 保姆级教程(八):卡片 & 下拉菜单
|
14天前
|
前端开发 JavaScript 容器
Bootstrap 5 保姆级教程(十五):表单
Bootstrap 5 保姆级教程(十五):表单
|
14天前
|
前端开发 容器
Bootstrap 5 保姆级教程(十四):Flex
Bootstrap 5 保姆级教程(十四):Flex
|
14天前
|
前端开发 JavaScript
Bootstrap 5 保姆级教程(十三):滚动监听 & 侧边栏导航
Bootstrap 5 保姆级教程(十三):滚动监听 & 侧边栏导航
|
14天前
|
前端开发 JavaScript
Bootstrap 5 保姆级教程(十二):弹出框 & 消息弹窗
Bootstrap 5 保姆级教程(十二):弹出框 & 消息弹窗
|
14天前
|
前端开发 JavaScript
Bootstrap 5 保姆级教程(十一):模态框 & 提示框
Bootstrap 5 保姆级教程(十一):模态框 & 提示框
|
14天前
|
前端开发
Bootstrap 5 保姆级教程(十):导航栏 & 轮播
Bootstrap 5 保姆级教程(十):导航栏 & 轮播
|
14天前
|
前端开发
Bootstrap 5 保姆级教程(九):折叠 & 导航
Bootstrap 5 保姆级教程(九):折叠 & 导航
|
14天前
|
前端开发
Bootstrap 5 保姆级教程(七):分页 & 列表组
Bootstrap 5 保姆级教程(七):分页 & 列表组
|
14天前
|
前端开发
Bootstrap 5 保姆级教程(六):进度条 & 加载效果
Bootstrap 5 保姆级教程(六):进度条 & 加载效果