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. Ansible (一)

    epel rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm yum -y ins ...

  2. modifiedvalues 主程序测试

    ##~ #-------------------------------------------------class InputFrame(wx.Frame):def __init__(self,t ...

  3. BizTalk开发系列(十六) XML命名空间

    BizTalk开发过程中如果有对XML进行开发操作,比如在自定义代码里操作XML消息或者在Mapping的时候使用Xpath对XML进行操 作.则有机会遇到XML命名空间的问题.常见的是使用Xpath ...

  4. Android课程---优化ListView列表视图

    activity_ui4.xml <?xml version="1.0" encoding="utf-8"?> <ListView xmlns ...

  5. LaTex 插入图片

    \usepackage{mathrsfs} \usepackage{amsmath} \usepackage{graphicx} 宏包 \includegraphics{graph01.eps} %插 ...

  6. Trie树

    一.什么是trie树 1.Trie树 (特例结构树)   Trie树,又称单词查找树.字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构.典型应用是用于统计和排序大量的字符串( ...

  7. 服务器(Liunx)打包发布java web工程

    Liunx服务器上打包发布web工程(开发工具Idea) 1.首先使用Idea自带的打包功能(点击package打包) 2.然后链接到服务器(我这里用的是Xshell链接工具) 3.将打好的war包传 ...

  8. what's the difference between dim as and dim as new?

    what's the difference between dim as and dim as new? There is no difference with value types (Intege ...

  9. DDoS deflate+iptables防御轻量级ddos攻击

    一.查看攻击者ip #netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n 二.安装ddos deflate ...

  10. Array与ArrayBuffer

    一.概述 二:Array使用 1.建立方式三种(数组里可以有不同的数据类型) 2.Array的简单使用 三:ArrayBuffer的简单使用 1.ArrayBuffer建立 导包 2.添加元素(+=) ...