BootStrap之bootstrap3-typeahead.js 自动完成

2024-01-27 12:32

本文主要是介绍BootStrap之bootstrap3-typeahead.js 自动完成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自动补全功能常用的就是JQuery UI内的Autocomplete了。但是项目里使用了Bootstrap UI,所以特意研究了一下bootstrap里的Typeahead插件。

在查资料的过程中,不难发现,typeahead.js一直会跟boostrap扯上关系。实际上在bootstrap 2.x时,自带了补全控件typeahead;但是到了,bootstrap 3.x时,舍弃了这个插件,这是出现了单独插件,名叫bootstrap-3-typeahead,再后面bootstrap-3-typeahead 改名 typeahead.js.

现在 typeahead.jquery最新版本:0.11.1     地址:https://github.com/twitter/typeahead.js(但是样式为tt开头如tt-suggestion tt-selectable,bootstrap.css中并没有对应样式,下载包里也没有)

bootstrap 2的 bootstrap-typeahead.js  最新版本:2.0  地址:https://github.com/tcrosen/twitter-bootstrap-typeahead/tree/2.0

但是不知道为何,有一个 jquery.typeahead.js 最新版本:2.10.4  地址:http://www.runningcoder.org/jquerytypeahead/demo/

总之版本非常乱。下面主要介绍bootstrap-3-typeahead插件

插件下载地址:https://github.com/bassjobsen/Bootstrap-3-Typeahead/

使用方式:

html

<input type="text" id="txtUser" name="txtUser" value="" />

三种实现形式

1.简单数组形式

JS

        $(function () {var localArrayData = ['beijing', 'shanghai', 'guangzhou', 'tianjin', 'hangzhou', 'ningbo'];$("#txtUser").typeahead({source: localArrayData});}); 

效果



2.JSON对象数组

JS:

        var localArrayData=[{ name: "someId1", name2: "s1", name5: "Display name 1" },{ name: "someId2", name2: "s2", name5: "Display name 2" },{ name: "someId3", name2: "s3", name5: "Display name 3" },{ name: "someId4", name2: "s4", name5: "Display name 4" },{ name: "someId5", name2: "s5", name5: "Display name 5" },{ name: "someId6", name2: "s6", name5: "Display name 6" }];$(function () {$("#txtUser").typeahead({source: localArrayData});}); 

效果:


注意:json数组每一个对象都要包含name属性,如果有一个没有,就会报错如下,可能是内部实现显示是找的name



3.异步从后台取数据

JS

 $(function () {$("#txtUser").typeahead({source: function (query, process) {$.ajax({url: '/Tools/GetOperUsers',data: {name: query},type: 'post',dataType: "json",success: function (data) {var res = [];$.each(data, function (i, item) {var aItem = { id: item.CreateUserId, name: item.CreateUserRealName };//把后台传回来的数据处理成带name形式res.push(aItem);})return process(res);}});}});});

后台:

 IList< OperLogModel >listData= operLogService.GetOperUsers(name);return Json(listData);

或者直接在后台处理好,如下

JS

  success: function (data) {return process(data);//后台已处理好包含name的json对象集合}

后台处理

           IList< OperLogModel >listData= operLogService.GetOperUsers(name);List<object> list = new List<object>();if (listData!=null){listData.ToList().ForEach(q => list.Add(new { id = q.CreateUserId, name = q.CreateUserRealName }));}return Json(list);

相关参数说明:

formatItem:function(item){}。对返回数据的具体某个json对象转化为字符串格式,用以显示在提示列表中,返回值:字符串;

setValue:function(item) {}。选中提示列表某项时,设置文本输入框中显示的值以及实际需要获取的值。返回值格式:{'data-value':item["输入框显示值的 item属性"],'real-value':item["实际需要获取值的item属性"]},后期可通过文本输入框的real-value属性获取该 值;


NameTypeDefaultDescription
sourcearray, function[]

用来查询的数据源。可以是数组或字符串,一个带有name属性的JSON对象的数组集合,或者一个函数。函数可以接受两个参数,query代表输入框中你的输入值(即查询值),process回调函数。The function may be used synchronously by returning the data source directly or asynchronously via the process callback's single argument.

itemsnumber8下拉选项中出现条目的最大数量。也可以设置为“all”,默认8
minLengthnumber1出发下拉提示的最小长度字符串。可以设置为0,即使没有填写任何内容,也会出现提示。
showHintOnFocusboolean or "all"false当输入框获得焦点时立刻显示提示。如果设置为true,显示所有匹配项。如果设置为“all”,显示所有提示,并不会按照当前文本过滤。当你需要一个组合框(Combo Box,由文本框和下拉框组成)功能时,可以考虑这个。
scrollHeightnumber, function0Number of pixels the scrollable parent container scrolled down (scrolled out the viewport).
matcherfunctioncase insensitive该函数用来确定匹配条目的规则。接受一个参数,item用于测试查询字符串是否匹配。通过当前查询字符串this.query。如果相匹配则返回true
sorterfunctionexact match,
case sensitive,
case insensitive
该函数用来对结果进行排序。接受一个参数items并且具有typeahead实例的作用域,通过this.query得到当前查询。
updaterfunctionreturns selected item该函数用来返回选中的条目。接受一个item参数并且具有typeahead实例的作用域。
highlighterfunctionhighlights all default matches用来高亮自动补全的结果。接受一个item参数并且拥有typeahead实例的作用域。应该返回html
displayTextfunctionitem.name || item用来得到数据源的条目的文本表示。接受一个item参数并且拥有typeahead实例的作用域。应该返回一个字符串。
autoSelectbooleantrue允许你决定是否自动选择第一个建议。关闭它意味着如果没有选择任何内容(或Enter或Tab),输入将不会清空。
afterSelectfunction$.noop()选择一个条目后的回调函数。It gets the current active item in parameter if any.
delayinteger0在查找之间添加延迟,指定延时毫秒数后,才正真向后台请求数据,以防止输入过快导致频繁向后台请求,默认:500
appendTojQuery elementnull默认情况下,菜单将会出现在输入元素的之后。使用这个选项来添加菜单到其他div。如果你想使用bootstrap的dropup或者dropdown-menu-right classes,就不要使用它
fitToElementbooleanfalse如果你希望菜单的大小与其所链接的输入的大小相同,置为true
addItemJSON objectfalse在list的最后添加一个条目,例如“New Entry”。这可能被用到,例如当一个条目在数据集中没有被找

但是问题来了,对于此需求,有可能会重名,所以需要联合id来供用户选择.实现代码和注释如下


        $(function () {$("#txtUser").typeahead({minLength: 0,//键入字数多少开始查询补全showHintOnFocus: "true",//将显示所有匹配项fitToElement: true,//选项框宽度与输入框一致items: 8,//下拉数量delay: 500,//延迟时间source: function (query, process) {$.ajax({url: '/Tools/GetOperUsers',data: {name: query},type: 'post',dataType: "json",success: function (data) {var res = [];$.each(data, function (i, item) {var aItem = { id: item.CreateUserId, name: item.CreateUserRealName,text:item.CreateUserRealName+' - '+item.CreateUserId };//把后台传回来的数据处理成带name形式res.push(aItem);})return process(res);}});},matcher: function (item) {//item是经过条件筛选后的对象集合(每一个此对象会走一次matcher方法),在这里我们可以做特殊的匹配,例如只要性别为男的(没特殊要求直接省略此注册方法)...//return ~item.toLowerCase().indexOf(this.query.toLowerCase());//默认的匹配:转小写后看是否包含.//~是位运算 NOT,如0变二进制逐位取反,是-1,如~5是-6,~100是-101,~-100是99,1是1,~true是-2,~false是-1//因为indexof是匹配不到是-1,匹配到了就0-n数字.~-1即0即false,其他数字自然就是true咯,所以~非常实用indexof包含逻辑转为true或false//return item.name.length > 2;//演示用,筛选长度大于0的return true;},highlighter: function (item) {//item是matcher筛选后的name数组集合,循环处理//var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')//return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {//    return '<strong>' + match + '</strong>'//})//默认的加粗实现//return item.length > 2 ? "三字-->" + item : "==>" + item + "<==";//测试下拉效果//var product = _.find(products, function (p) {//    return p.id == id;//});//return product.name + " ($" + product.price + ")";//处理方式return item;},displayText: function (item) {//item对象return item.text;//下拉显示维护好的为姓名+ID},//afterSelect: function (item) {//item对象//    //alert("选择项之后的事件 ,item是当前选中的。");//},updater: function (item) {//item是对象,选中后默认返回displayText的值,对于需要的id和name没有,所以手动赋值吧$('#txtUser').attr('value', item.id);//把id值放到value属性里return item.name;//下拉框显示重写为name覆盖默认的displayText},});});

按上代码:

取值:

var id= $('#txtUser').attr('value');

var name=$('#txtUser').val();

获取选中对象

var objItem=$('#txtUser').typeaheader("getActive);//注意这里面只有一个dislayText值,没有id,没有name.......


赋值:

对于怎么赋值,没研究出来.有谁知道麻烦告知一下.

折中方案解决赋值取值问题:

使用隐藏域,值放隐藏域供表单使用,显示值放text下拉框value里


这篇关于BootStrap之bootstrap3-typeahead.js 自动完成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/650252

相关文章

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1