Bootstrap 中的 Typeahead 组件就是通常所说的自动完成 AutoComplete,类似百度、谷歌等搜索提示;输入关键词出现相应的下拉列表数据。

是Bootstrap-3-Typeahead,不是Twitter open source的typeahead,两者用法有差异。外加如果配合原生的Bootstrap3 的话推荐还是用这个。(当然Twitter open source也有个bootstrap)。

1、基于Bootstrap v3 版本的  typeahead

 第一,简单使用:

 首先,最简单的使用方式,就是直接在标记中声明,通过 data-provide="typeahead" 来声明这是一个 typeahead 组件,通过 data-source= 来提供数据。当然了,你还必须提供 bootstrap-typeahead.js 脚本。

<html>
<head>
<meta charset="utf-8"/>
<link href="./bootstrap.min.css" rel="stylesheet" type="text/css" />
</head>
<body>
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
<script src="//cdn.bootcss.com/bootstrap-3-typeahead/4.0.2/bootstrap3-typeahead.min.js"></script> <form id="searchform" class="navbar-form navbar-left" role="search" target="_blank" method="get" action="">
<div class="form-group">
<!--第一种方法-->
<input id="product_search" type="text" data-provide="typeahead" data-source='["Deluxe Bicycle", "Super Deluxe Trampoline", "Super Duper Scooter"]'>
</div>
<button type="submit" class="btn" id="searchbtn">搜索</button>
</form>
</body>
</html>

  第二,支持 Ajax 获取数据

  注意,我们提供了一个 source 函数来提供数据,这个函数接收两个参数,第一个参数 query 表示用户的输入,第二个参数是 process 函数,这个 process 函数是 typeahead 提供的,用来处理我们的数据。

  如果你希望通过 Ajax 调用从服务器端获取匹配的数据,那么,在异步完成的处理函数中,你需要获取一个匹配的字符串数组,然后,将这个数组作为参数,调用 process 函数。

<html>
<head>
<meta charset="utf-8"/>
<link href="./bootstrap.min.css" rel="stylesheet" type="text/css" />
</head>
<body>
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
<script src="//cdn.bootcss.com/bootstrap-3-typeahead/4.0.2/bootstrap3-typeahead.min.js"></script> <form id="searchform" class="navbar-form navbar-left" role="search" target="_blank" method="get" action="">
<div class="form-group">
<!--第一种方法-->
<!--<input id="product_search" type="text" data-provide="typeahead" data-source='["Deluxe Bicycle", "Super Deluxe Trampoline", "Super Duper Scooter"]'>-->
<input type="text" id="product_search" name="keys" class="form-control" data-provide="typeahead" data-value="" autocomplete="off" placeholder="请输入要搜索关键词">
</div>
<button type="submit" class="btn" id="searchbtn">搜索</button>
</form>
<script>
/***第二种方法****************************************/
console.log("欢迎使用typeahead");
/***第一种形式******返回json串***********************/
$('#product_search').typeahead({
source: function (query, process) {
return $.ajax({
url: './server.php',
type: 'post',
data: { query: query },
dataType: 'json',
success: function (result) {
var resultList = result.map(function (item) {
var aItem = { id: item.id, name: item.name };
return JSON.stringify(aItem);
});
return process(resultList); }
});
},
matcher: function (obj) {
var item = JSON.parse(obj);
return ~item.name.toLowerCase().indexOf(this.query.toLowerCase())
},
sorter: function (items) {
var beginswith = [], caseSensitive = [], caseInsensitive = [], item;
while (aItem = items.shift()) {
var item = JSON.parse(aItem);
if (!item.name.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(JSON.stringify(item));
else if (~item.name.indexOf(this.query)) caseSensitive.push(JSON.stringify(item));
else caseInsensitive.push(JSON.stringify(item));
}
return beginswith.concat(caseSensitive, caseInsensitive)
},
highlighter: function (obj) {
var item = JSON.parse(obj);
var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
return item.name.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
return '<strong style="font-size:16px;">' + match + '</strong>'
})
},
updater: function (obj) {
var item = JSON.parse(obj);
$('#product_search').attr('data-value', item.id);
return item.name;
},
delay:500,
minLength:1,
items: 10, //显示10条
delay: 0, //延迟时间
}); /**第二种形式*****返回json串**********************************/
jQuery('#product_search').typeahead({
source: function (query, process) {
//query是输入值
jQuery.getJSON('./server.php', { "query": query }, function (data) {
process(data);
});
},
highlighter: function (item) {
var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
return '<strong style="font-size:16px;">' + match + '</strong>'
})
},
updater: function (item) {
return item
},
afterSelect: function (item) {
//选择项之后的时间,item是当前选中的项
$("#product_search").attr("data-value",item.id);
},
delay:500,
minLength:1,
items: 10, //显示10条
delay: 0, //延迟时间
});
</script>
</body>
</html>

  服务器处理文件 server.php

<?php
//1、 先获取当前搜索词"query"
//2、 从数据库中查询此字段的热词集合
//3、 从数据库中检索出包含此搜索词的热词集合,并按搜索次数排序,将数据返回给typeahead.js
if(!empty($_GET)){
$data = array();
$data[0]['id'] = 0;
$data[0]['name'] = "aaaaa";
$data[1]['id'] = 1;
$data[1]['name'] = "aaaaabbbbbb";
$data[2]['id'] = 2;
$data[2]['name'] = "aaaaaabbbbbccccc";
}else{
$data = array();
$data[0]['id'] = 0;
$data[0]['name'] = "baidu";
$data[1]['id'] = 1;
$data[1]['name'] = "baidu2";
$data[2]['id'] = 2;
$data[2]['name'] = "baidu3";
}
echo json_encode($data);die;

文件链接及打包地址: 

      ajax两种形式都支持: 

      bootstrap-3-typeahead cdn

        ajax只支持第二种形式的 typeahead组件: 

      自动补全插件-bootstrap-3-typeahead

      或 https://www.twitterbootstrapmvc.com/Documentation#typeahead   该 bootstrap.typeahead.min.js

      demo打包地址:链接:http://pan.baidu.com/s/1geQ0DVX 密码:83vn

      

参考资料: 使用 Bootstrap Typeahead 组件 - 冠军 - 博客园

      Bootstrap typeahead使用问题记录及解决方案

      Bootstrap typeahead ajax result format - Example [结果格式的例子引导Typeahead Ajax] - 问题-字节技术

      typeahead Bloodhound完整例子

2、Twitter typeahead+bootstrap 官网用法:

  typeahead的官方主页:http://twitter.github.io/typeahead.js/

  typeahead的官方Example:http://twitter.github.io/typeahead.js/examples/

参考资料:  使用bootstrap typeahead插件

       Twitter bootstrap模糊查询插件

php + Bootstrap-v3-Typeahead 自动完成组件的使用的更多相关文章

  1. 【Bootstrap】 typeahead自动补全

    typeahead 这篇文章记录了我在使用typeahead的一些问题,不是很全,但是基本够用. Bootstrap提供typeahead组件来完成自动补全功能. 两种用法: 直接给标签添加属性 &l ...

  2. bootstrap - typeahead自动补全插件

    $('#Sale').typeahead({ ajax: { url: '@Url.Action("../Contract/GetSale")', //timeout: 300, ...

  3. Winform(C#.NET)自动更新组件的使用及部分功能实现

    声明:核心功能的实现是由园子里圣殿骑士大哥写的,本人是基于他核心代码,按照自己需求进行修改的.   而AutoUpdaterService.xml文件生成工具是基于评论#215楼 ptangbao的代 ...

  4. 【Android】友盟的自动更新组件

    前言 又好又专业的服务能帮开发者省很多时间.一开始做项目也准备自己来统计数据.自己做自动更新,随着使用友盟服务的时间增加,渐渐放弃了这种想法,转而研究如何更充分的使用,这里分享一下使用自动更新组件的心 ...

  5. 使用Bootstrap v3.3.4注意细节box-sizing

    一.bootstrap样式 在Bootstrap v3.3.4中有下面一条重置样式: * { -webkit-box-sizing: border-box; -moz-box-sizing: bord ...

  6. jQuery UI Autocomplete是jQuery UI的自动完成组件(share)

    官网:http://jqueryui.com/autocomplete/ 以下分享自:http://www.cnblogs.com/yuzhongwusan/archive/2012/06/04/25 ...

  7. Winform(C#.NET)自动更新组件的使用及部分功能实现(一点改进功能)

    接前两篇继续: Winform(C#.NET)自动更新组件的使用及部分功能实现 Winform(C#.NET)自动更新组件的使用及部分功能实现(续) 借鉴文章:http://www.cnblogs.c ...

  8. Winform(C#.NET)自动更新组件的使用及部分功能实现(续)

    接昨天的文章Winform(C#.NET)自动更新组件的使用及部分功能实现 强制更新的实现部分: 将DownloadConfirm窗体修改成单纯的类 public class DownloadConf ...

  9. 免费下载!Twitter Bootstrap V3 矢量界面素材

    Bootstrap 3 Vector UI Kit 包含所有矢量格式的 Twitter Bootstrap 3 界面控制元素.Glyphicons 以及额外的一些界面素材,而且基本的图形元素都切好图了 ...

随机推荐

  1. Android:理解Fragment

    最近都在公司搞测试,静不下心来学android.今天就把Fragment搞懂吧. Fragment的几点要点: 1.用于大屏幕平板,容纳更多组件,可复用2.Fragment必须嵌入Activity中 ...

  2. 运维、linux运维是什么?

    从不知道运维是什么 到后来接触了linux运维 后来玩遍了运维常用的各种开源软件发现原来运维是这么回事 又到了后来,运维真的是我理解的这些吗?会软件,会配置,会部署.会调优,会处理故障...但是总觉得 ...

  3. CSS重新认识(一)

    1. 所有的元素都遵循盒子模型,即内容部分+padding(填充部分)+border+margin(外边距部分); 2.我们平常定义的width与height指的内容部分的长宽; 3. 行内元素在不改 ...

  4. zk jquery的使用

    jQuery_effects.zul: <?page title="Jquery" contentType="text/html;charset=UTF-8&quo ...

  5. Hibernate和Mybatis的对比

    http://blog.csdn.net/jiuqiyuliang/article/details/45378065 Hibernate与Mybatis对比 1. 简介 Hibernate:Hiber ...

  6. P4实验问题 解决python模块导入

    参考:Python导入自定义包或模块 在执行./run_demo.sh的过程中,遇到了python的模块问题: root@ubuntu:/home/wasdns/tutorials/SIGCOMM_2 ...

  7. nginx的worker_processes,worker_cpu_affinity及worker_connections

    worker_processes:nginx要开启的进程数,一般为cpu的核数 worker_cpu_affinity:为每个进程绑定一个cpu,减少cpu切换的开销 配置示例: worker_pro ...

  8. PHP检测移动设备类mobile detection使用实例

    目前,一个网站有多个版本是很正常的,如PC版,3G版,移动版等等.根据不同的浏览设备我们需要定向到不同的版本中.不仅如此,我们有时候还需要根据不同的客户端加载不同的CSS,因此我们需要能够检测浏览设备 ...

  9. linux入命令基础

    查看系统版本: cat /proc/version lsb_release -a uname -a 查看进程: ps ps aux |grep #查询字符串 杀掉进程:  kill #标号 强制杀掉: ...

  10. HTML其他基本格式说明

    1.<!DOCTYPE>说明页面中使用的HTML版本,只是信息声明 2.元信息元素<meta>,通过属性定义文件信息的名称.内容.文档的关键字.作者及描述等..content内 ...