基于bootstrap按钮式下拉菜单组件的搜索建议插件


Posted in Javascript onMarch 25, 2017

本文实例为大家分享了Bootstrap Search Suggest搜索建议插件的具体代码,供大家参考,具体内容如下

<!DOCTYPE html> 
<html lang="zh-cn"> 
 
<head> 
 <meta charset="utf-8"> 
 <title>Bootstrap 搜索建议插件</title> 
 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
 <meta name="description" content="这是一个基于 bootstrap 按钮式下拉菜单组件的搜索建议插件"> 
 <meta name="Keywords" content="Bootstrap Search Suggest,bootstrap,搜索建议插件"/> 
 <meta name="author" content="lizhiwen@meizu.com"> 
 <link href="http://cdn.bootcss.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="external nofollow" rel="stylesheet"> 
</head> 
 
<body> 
 <div class="container"> 
 <h2>bootstrap combox 搜索建议插件</h2> 
 <p>这是一个基于 bootstrap 按钮式下拉菜单组件的搜索建议插件.</p> 
 <p>使用说明:<a href="README.html" rel="external nofollow" target="_blank">README.html</a> <a href="https://github.com/lzwme/bootstrap-suggest-plugin" rel="external nofollow" target="_blank">Github</a></p> 
 <form action="index_submit" method="get" accept-charset="utf-8" role="form"> 
  <h3>测试(URL 获取)</h3> 
  <p>配置了 data-id,非下拉菜单选择输入则背景色警告。</p> 
  <div class="row"> 
  <div class="col-lg-2"> 
   <div class="input-group"> 
   <input type="text" class="form-control" id="test"> 
   <div class="input-group-btn"> 
    <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> 
    <span class="caret"></span> 
    </button> 
    <ul class="dropdown-menu dropdown-menu-right" role="menu"> 
    </ul> 
   </div> 
   <!-- /btn-group --> 
   </div> 
  </div> 
  </div> 
 
  <h3>测试(URL 获取)</h3> 
  <p>不展示下拉菜单按钮。</p> 
  <div class="row"> 
  <div class="col-lg-6"> 
   <div class="input-group"> 
   <input type="text" class="form-control" id="testNoBtn"> 
   <div class="input-group-btn"> 
    <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> 
    <span class="caret"></span> 
    </button> 
    <ul class="dropdown-menu dropdown-menu-right" role="menu"> 
    </ul> 
   </div> 
   <!-- /btn-group --> 
   </div> 
  </div> 
  </div> 
 
  <h3>测试(json 数据中获取)</h3> 
  <p>默认启用空关键字检索。</p> 
  <div class="row"> 
  <div class="col-lg-6"> 
   <div class="input-group"> 
   <input type="text" class="form-control" id="test_data"> 
   <div class="input-group-btn"> 
    <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> 
    <span class="caret"></span> 
    </button> 
    <ul class="dropdown-menu dropdown-menu-right" role="menu"> 
    </ul> 
   </div> 
   <!-- /btn-group --> 
   </div> 
  </div> 
  </div> 
 
  <h3>百度搜索</h3> 
  <p>支持逗号分隔多关键字</p> 
  <div class="row"> 
  <div class="col-lg-6"> 
   <div class="input-group" style="width: 300px;"> 
   <input type="text" class="form-control" id="baidu"> 
   <div class="input-group-btn"> 
    <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> 
    <span class="caret"></span> 
    </button> 
    <ul class="dropdown-menu dropdown-menu-right" role="menu"> 
    </ul> 
   </div> 
   <!-- /btn-group --> 
   </div> 
  </div> 
  </div> 
 
  <h3>淘宝搜索</h3> 
  <p>支持逗号分隔多关键字</p> 
  <div class="row"> 
  <div class="col-lg-6"> 
   <div class="input-group" style="width: 400px;"> 
   <input type="text" class="form-control" id="taobao"> 
   <div class="input-group-btn"> 
    <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> 
    <span class="caret"></span> 
    </button> 
    <ul class="dropdown-menu dropdown-menu-right" role="menu"> 
    </ul> 
   </div> 
   <!-- /btn-group --> 
   </div> 
  </div> 
  </div> 
 
 </form> 
 </div> 
 <script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script> 
 <script src="http://cdn.bootcss.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> 
 <script src="bootstrap-suggest.js"></script> 
 <script type="text/javascript"> 
 var testBsSuggest = $("#test").bsSuggest({ 
 //url: "/rest/sys/getuserlist?keyword=", 
 url: "data.json", 
 /*effectiveFields: ["userName", "shortAccount"], 
 searchFields: [ "shortAccount"], 
 effectiveFieldsAlias:{userName: "姓名"},*/ 
 idField: "userId", 
 keyField: "userName" 
 }).on('onDataRequestSuccess', function (e, result) { 
 console.log('onDataRequestSuccess: ', result); 
 }).on('onSetSelectValue', function (e, keyword) { 
 console.log('onSetSelectValue: ', keyword); 
 }).on('onUnsetSelectValue', function (e) { 
 console.log("onUnsetSelectValue"); 
 }); 
 
 /** 
 * 不显示下拉按钮 
 */ 
 var testBsSuggest = $("#testNoBtn").bsSuggest({ 
 //url: "/rest/sys/getuserlist?keyword=", 
 url: "data.json", 
 /*effectiveFields: ["userName", "shortAccount"], 
 searchFields: [ "shortAccount"], 
 effectiveFieldsAlias:{userName: "姓名"},*/ 
 showBtn: false, 
 idField: "userId", 
 keyField: "userName" 
 }).on('onDataRequestSuccess', function (e, result) { 
 console.log('onDataRequestSuccess: ', result); 
 }).on('onSetSelectValue', function (e, keyword) { 
 console.log('onSetSelectValue: ', keyword); 
 }).on('onUnsetSelectValue', function (e) { 
 console.log("onUnsetSelectValue"); 
 }); 
 
 /** 
 * 从 data参数中过滤数据 
 */ 
 var testdataBsSuggest = $("#test_data").bsSuggest({ 
 indexId: 2, //data.value 的第几个数据,作为input输入框的内容 
 indexKey: 1, //data.value 的第几个数据,作为input输入框的内容 
 data: { 
  'value':[ 
  {'id':'0','word':'lzw','description':'http://lzw.me'}, 
  {'id':'1','word':'lzwme','description':'http://w.lzw.me'}, 
  {'id':'2','word':'meizu','description':'http://www.meizu.com'}, 
  {'id':'3','word':'flyme','description':'http://flyme.meizu.com'} 
  ], 
  'defaults':'http://lzw.me' 
 } 
 }); 
 /** 
 * 百度搜索 API 测试 
 */ 
 var baiduBsSuggest = $("#baidu").bsSuggest({ 
 allowNoKeyword: false, //是否允许无关键字时请求数据。为 false 则无输入时不执行过滤请求 
 multiWord: true,  //以分隔符号分割的多关键字支持 
 separator: ",",  //多关键字支持时的分隔符,默认为空格 
 getDataMethod: "url", //获取数据的方式,总是从 URL 获取 
 url: 'http://unionsug.baidu.com/su?p=3&t='+ (new Date()).getTime() +'&wd=', /*优先从url ajax 请求 json 帮助数据,注意最后一个参数为关键字请求参数*/ 
 jsonp: 'cb',   //如果从 url 获取数据,并且需要跨域,则该参数必须设置 
 processData: function (json) { // url 获取数据时,对数据的处理,作为 getData 的回调函数 
  var i, len, data = {value: []}; 
  if (!json || !json.s || json.s.length === 0) { 
  return false; 
  } 
 
  console.log(json); 
  len = json.s.length; 
 
  jsonStr = "{'value':["; 
  for (i = 0; i < len; i++) { 
  data.value.push({ 
   word: json.s[i] 
  }); 
  } 
  data.defaults = 'baidu'; 
 
  //字符串转化为 js 对象 
  return data; 
 } 
 }); 
 /** 
 * 淘宝搜索 API 测试 
 */ 
 var taobaoBsSuggest = $("#taobao").bsSuggest({ 
 indexId: 2,  //data.value 的第几个数据,作为input输入框的内容 
 indexKey: 1,  //data.value 的第几个数据,作为input输入框的内容 
 allowNoKeyword: false, //是否允许无关键字时请求数据。为 false 则无输入时不执行过滤请求 
 multiWord: true, //以分隔符号分割的多关键字支持 
 separator: ",",  //多关键字支持时的分隔符,默认为空格 
 getDataMethod: "url", //获取数据的方式,总是从 URL 获取 
 showHeader: true, //显示多个字段的表头 
 effectiveFieldsAlias:{Id: "序号", Keyword: "关键字", Count: "数量"}, 
 url: 'http://suggest.taobao.com/sug?code=utf-8&extras=1&q=', /*优先从url ajax 请求 json 帮助数据,注意最后一个参数为关键字请求参数*/ 
 jsonp: 'callback',  //如果从 url 获取数据,并且需要跨域,则该参数必须设置 
 processData: function(json){ // url 获取数据时,对数据的处理,作为 getData 的回调函数 
  var i, len, data = {value: []}; 
 
  if(!json || !json.result || json.result.length == 0) { 
  return false; 
  } 
 
  console.log(json); 
  len = json.result.length; 
 
  for (i = 0; i < len; i++) { 
  data.value.push({ 
   "Id": (i + 1), 
   "Keyword": json.result[i][0], 
   "Count": json.result[i][1] 
  }); 
  } 
  console.log(data); 
  return data; 
 } 
 }); 
 
 $("form").submit(function(e) { 
 return false; 
 }); 
 </script> 
</body> 
 
</html>

配置参数

参数列表中的值均为插件默认值

{
 url: null,   //请求数据的 URL 地址
 jsonp: null,   //设置此参数名,将开启jsonp功能,否则使用json数据结构
 data: {},   //提示所用的数据
 getDataMethod: "firstByUrl", //获取数据的方式,url:一直从url请求;data:从 options.data 获取;firstByUrl:第一次从Url获取全部数据,之后从options.data获取
 indexId: 0,   //每组数据的第几个数据,作为input输入框的 data-id,设为 -1 且 idField 为空则不设置此值
 indexKey: 0,   //每组数据的第几个数据,作为input输入框的内容
 idField: "",   //每组数据的哪个字段作为 data-id,优先级高于 indexId 设置(推荐)
 keyField: "",   //每组数据的哪个字段作为输入框内容,优先级高于 indexKey 设置(推荐)
 effectiveFields: [],  //有效显示于列表中的字段,非有效字段都会过滤,默认全部,对自定义getData方法无效
 effectiveFieldsAlias: {}, //有效字段的别名对象,用于 header 的显示
 searchFields: [],  //有效搜索字段,从前端搜索过滤数据时使用。effectiveFields 配置字段也会用于搜索过滤
 showHeader: false,  //是否显示选择列表的 header,默认有效字段大于一列时显示,否则不显示
 showBtn: true,   //是否显示下拉按钮
 allowNoKeyword: true,  //是否允许无关键字时请求数据
 multiWord: false,  //以分隔符号分割的多关键字支持
 separator: ",",   //多关键字支持时的分隔符,默认为半角逗号
 processData: processData, //格式化数据的方法,返回数据格式参考 data 参数
 getData: getData,  //获取数据的方法
 autoMinWidth: false,  //是否自动最小宽度,设为 false 则最小宽度不小于输入框宽度
 listAlign: "left",  //提示列表对齐位置,left/right/auto
 inputBgColor: '',  //输入框背景色,当与容器背景色不同时,可能需要该项的配置
 inputWarnColor: "rgba(255,0,0,.1)", //输入框内容不是下拉列表选择时的警告色
 listStyle: {
 "padding-top":0, "max-height": "375px", "max-width": "800px",
 "overflow": "auto", "width": "auto",
 "transition": "0.3s", "-webkit-transition": "0.3s", "-moz-transition": "0.3s", "-o-transition": "0.3s"
 },    //列表的样式控制
 listHoverStyle: 'background: #07d; color:#fff', //提示框列表鼠标悬浮的样式
 listHoverCSS: "jhover",  //提示框列表鼠标悬浮的样式名称
 keyLeft: 37,   //向左方向键
 keyUp: 38,   //向上方向键
 keyRight: 39,   //向右方向键
 keyDown: 40,   //向下方向键
 keyEnter: 13   //回车键
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
整理一些JavaScript的IE和火狐的兼容性注意事项
Mar 17 Javascript
Jquery事件的连接使用示例
Jun 18 Javascript
js中parseInt函数浅谈
Jul 31 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
Jan 26 Javascript
浅谈jquery回调函数callback的使用
Jan 30 Javascript
JavaScript通过join函数连接数组里所有元素的方法
Mar 20 Javascript
深入理解angularjs过滤器
May 25 Javascript
简单理解js的冒泡排序
Dec 19 Javascript
深入理解React高阶组件
Sep 28 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
Feb 02 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
Feb 28 Javascript
vuex实现购物车功能
Jun 28 Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
Mar 25 #Javascript
bootstrap suggest搜索建议插件使用详解
Mar 25 #Javascript
JS实现列表页面隔行变色效果
Mar 25 #Javascript
angular仿支付宝密码框输入效果
Mar 25 #Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
Mar 25 #jQuery
axios基本入门用法教程
Mar 25 #Javascript
Bootstrap DateTime Picker日历控件简单应用
Mar 25 #Javascript
You might like
php简单获取文件扩展名的方法
2015/03/24 PHP
javascript之ESC(第二类混淆)
2007/05/06 Javascript
jQuery autocomplete插件修改
2009/04/17 Javascript
浏览器常用高宽的jquery插件
2011/02/24 Javascript
event.X和event.clientX的区别分析
2011/10/06 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
JQuery ztree带筛选、异步加载实例讲解
2016/02/25 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
VUE多层路由嵌套实现代码
2017/05/15 Javascript
JS使用贪心算法解决找零问题示例
2017/11/27 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
angular将html代码输出为内容的实例
2018/09/30 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
在Vue.js中使用TypeScript的方法
2020/03/19 Javascript
[16:56]教你分分钟做大人:司夜刺客
2014/10/30 DOTA
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
Python中super函数用法实例分析
2019/03/18 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
div或img图片高度随宽度自适应的方法
2020/02/06 HTML / CSS
家长给小学生的评语
2014/01/30 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
解除劳动合同协议书
2014/09/17 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书
MySQL高速缓存启动方法及参数详解(query_cache_size)
2021/07/01 MySQL
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js