使用Bootstrap typeahead插件实现搜索框自动补全的方
这就是贴代码的坏处之一搜索框快被网友玩儿坏了!!!有故意输入空格的,有输入or 1=1的,有alert的,有html乱入的.......而且好像还在玩儿,随他们去吧,只要开心就好。
在项目中,经常会用到输入框的自动补全功能,就像百度、淘宝等搜索框一样当用户输入首字母、关键词时,后台会迅速将与此相关的条目返回并显示到前台,以便用户选择,提升用户体验。本项目的补全功能和这些大厂的技术是没有可比性的,但用于站内搜索也是绰绰有余了。
接触到的自动补全插件主要有两个aulete和typeahead。本站使用的是typeahead.
相关参数说明
sourcefunction(query,process){}。query表示当前文本输入框中的字符串,可在该方法中通过ajax向后台请求数据(数组形式的json对象),然后将返回的对象作为process的参数;
formatItemfunction(item){}。对返回数据的具体某个json对象转化为字符串格式,用以显示在提示列表中,返回值字符串;
setValuefunction(item) {}。选中提示列表某项时,设置文本输入框中显示的值以及实际需要获取的值。返回值格式{'data-value':item["输入框显示值的 item属性"],'real-value':item["实际需要获取值的item属性"]},后期可通过文本输入框的real-value属性获取该 值;
items自动完成提示的最大结果集数量,默认8;
minLength当前文本输入框中字符串达到该属性值时才进行匹配处理,默认1;
delay指定延时毫秒数后,才正真向后台请求数据,以防止输入过快导致频繁向后台请求,默认500
具体代码如下
引入js文件
<script src="~/Scripts/jquery-1.9.0.js"></script> <script src="~/Scripts/bootstrap.js"></script> <script src="~/Content/js/bootstrap3-typeahead.js"></script>
Html代码
<form id="searchform" class="navbar-form navbar-right" role="search" target="_blank" method="get" action="/Search/Index"> <div class="form-group"> <input type="text" id="searchWords" name="searchWords" class="form-control" data-provide="typeahead" aulete="off" placeholder="请输入要搜索关键词"> </div> <button type="submit" class="btn" id="searchbtn"> 搜索 </button> </form>
处理相关搜索词的js
//搜索自动补全;给搜索框注册自动联想完成事件 autoComplete: function () { jQuery('#searchWords').typeahead({ source: function (query, process) { //query是输入值 jQuery.getJSON('/Search/GetHotSearchItems', { "query": query }, function (data) { process(data); }); }, updater: function (item) { return item.replace(/<a(.+?)<\/a>/, ""); //这里一定要return,否则选中不显示 }, afterSelect: function (item) { //选择项之后的时间,item是当前选中的项 alert(item); }, items: 8, //显示8条 delay: 500 //延迟时间 }); },
后台处理 /Search/GetHotSearchItems:
#region 2.0 jquery typeahead插件异步获取搜索热词、自动补全搜索框; ActionResult GetHotSearchItems() /// <summary> /// 2.0 jquery typeahead插件异步获取搜索热词、自动补全搜索框> /// 每搜索一次就将此次用户搜索的详情入库> /// 定时任务每隔10分钟统计一次各搜索词的次数、将统计信息更新到SearchRank表 /// </summary> /// <returns>JSON</returns> public ActionResult GetHotSearchItems() { //2.1 先获取当前搜索词"query" string query = Request["query"]; //2.2 从数据库中查询此字段的热词集合 IBLL.ISearchRankService hotService = OperateHelper.Current.serviceSession.SearchRankService; //2.3 从数据库中检索出包含此搜索词的热词集合,并按搜索次数排序,将数据返回给typeahead.js List<SearchRank> hotList = hotService.GetDataListBy(s => s.KeyWord.Contains(query), s => s.SearchTimes); if (hotList != null) { var list1 = hotList.Select(h => new { name = h.KeyWord, times = h.SearchTimes }).ToList(); ArrayList list2 = new ArrayList(); int i = 1; foreach (var item in list1) { list2.Add(string.Format("<a class=\"cat\" href=\"#\">{0}</a>{1}", i, item.name)); i++; } return Json(list2, JsonRequestBehavior.AllowGet); } else { return Json("", JsonRequestBehavior.AllowGet); } } #endregion
就先这样吧。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程