适用于Bootstrap的Ajax输入建议控件(Demo)
在bootcomplete.js的基础上大幅度改进,改动如下:
- 文本框是去焦点时自动隐藏输入提示组件
- 增加最大建议数目限制(maxNum)
- 增加键盘方向键选择
- 增加文本对齐选择(align)
- 增加回车触发函数(nextStep)
- 增加以分隔符分割的联想(split)
- 增加匹配高亮(highlight)
- 增加接口端数据格式化方法已适应插件内部格式(dataCallback)
- 增加选中项方法,返回选中项jquery对象(onSelect)
- 内部字段增加value值,选中项调整为value值不再是label
- 增加第一个item是否默认被选中操作(firstSelected)
<link rel="stylesheet" href="https://raw.githubusercontent.com/androiddevelop/autosuggest.js/master/dist/autosuggest.min.css">
<script src="https://raw.githubusercontent.com/androiddevelop/autosuggest.js/master/dist/jquery.autosuggest.min.js"></script>
npm install bootstrap-autosuggest
//示例1
$('#input').autosuggest({url:'/search.php'});
//示例2
$('#input').autosuggest({
url: 'search',
queryParamName: 'pageTag',
firstSelected: true,
dataCallback:function(data) {
var json = [];
if (data.S === 10006) {
for (var i = 0; i < data.list.length; i++) {
json.push({ value: data.list[i].TagName, label: data.list[i].GroupName + '=>' + data.list[i].TagName });
}
return json;
}
return json;
},
onSelect:function(elm) {
var labelArr = elm.data('label').split('=>');
$('[name="pageGroup"]').val(labelArr[0]);
}
});
- 普通模式参见Demo
- npm模式参见项目中example中示例
[
{
"id" : someId,
"value" : value,
"label" : "some label name"
}
]
id和label可以是任意值,不是必须项,这两个值可以用作元素选中后的额外属性值使用
如果服务端返回数据非此种格式,可以使用dataCallback参数进行转换
提交请求地址, 可以是json文件,注意跨域问题
请求方式(get
, post
), 默认get
传递当前输入框的值时的参数名称,默认 query
,即如果是get方式并保持该值为默认值,则请求url为 xxx.com?query=input_value
,如果设置此值为 search
,则url为 xxx.com?search=input_value
对齐方式,默认左对齐,可选项 left
, center
, right
第一个是否默认被选中,默认false
包围输入框外层div的css样式,见下面结构介绍
自动补全菜单的css样式,如果需要自定义请提供, 见下面结构介绍
发起请求的最小长度,只有>= 此长度时才会出现建议框,默认最小长度为 2
最大建议数目,默认最多给出 10
个建议提示
是否高亮显示匹配内容, 默认 false
分隔符, 例如我们需要文本框中输入多个省份,使用逗号分开,那么我们可以设定 split
为 ,
, 之后 autosuggest.js
会根据最后一个逗号后面的内容进行建议. 默认为 null
,即把文本框中所有输入视为一个文本进行建议.
建议框由隐藏状态变为可见状态时的回调,默认null
建议框由可见状态变为隐藏状态时的回调,默认null
选中建议词后,建议框消失,之后点击回车要执行的函数
是否鼠标选中后或者键盘选中回车后立刻执行nextStep操作, 默认 false
,即选中后,所选项将会填充到输入框中,需要再次回车执行nextStep操作
如果服务端返回数据不满足展示需求,可以自行进行转换,之后在onSelect中进行数据的还原
记录最后选择的jquery对象,可以从该对象上获取 data-id
、 data-label
和 data-value
属性
除了queryParam之外的其他参数, 使用:
"key1" : "value1",
"key2" : "value2"
<input type="text" class="form-control" id="text" placeholder="默认操作" autocomplete="off"/>
<div class="as-wrapper">
<input type="text" class="form-control" id="text" placeholder="默认操作" autocomplete="off"/>
<div class="as-menu list-group" style="display: none;">
<span href="#" class="list-group-item as-align-left" data-id="1" data-label="beijing">beijing</span>
<span href="#" class="list-group-item as-align-left" data-id="2" data-label="shanghai">shanghai</span>
<span href="#" class="list-group-item as-align-left" data-id="3" data-label="hangzhou">hangzhou</span>
<span href="#" class="list-group-item as-align-left" data-id="4" data-label="guangzhou">guangzhou</span>
<span href="#" class="list-group-item as-align-left" data-id="5" data-label="zhengzhou">zhengzhou</span>
</div>
</div>
//简单实例
$("#test").autosuggest({
url: 'city.json',
queryParamName: 'search'
});
//复杂实例
$("#test").autosuggest({
url: 'city.json',
minLength: 1,
maxNum: 3,
align: 'center',
queryParamName: 'search'
method: 'post',
highlight: true,
extra: {
"key1": "value1",
"key2": "value2"
},
nextStep: function (selectedElement) {
alert(selectedElement.data('value'));
},
split: ' ',
open: function(){
console.log("start open");
},
close: function(){
console.log("start close");
},
dataCallback: function(serverData){
}
});
- 提供npm模式使用。
- 修正bug。
- 修正bug。
- 修正未高亮时数据填充问题。
- 增加第一项是否被选中功能(firstSelected)。
- 完成初版
autosuggest
感谢 aofong为auto-suggest做出的贡献。
The MIT License (MIT)
Copyright (c) 2015 Yuedong.Li
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
有任何问题,欢迎发送邮件到[email protected]交流.