一、需要准备的文件:
jquery.js
neverModules-autoComplete.js
autocomplete.css
animated_loading.gif
二、页面:
1、引入文件:
<link rel="stylesheet" href="/page/autocomplete.css" type="text/css">
<script type="text/javascript" src="/page/neverModules-autoComplete.js"></script>
<script type="text/javascript" src="/page/jquery.js"></script>
2、需要自动补全的文本框:
<input id="operatorName" type="text" name="operatorName" style="width:60%;" class="textfield_readselect" onkeyup="goodsAutoComplete.hdleEvent(event);" ondblclick="goodsAutoComplete.expandAllItem();"
onmouseover="goodsAutoComplete.showAnimateImage();" onmouseout="goodsAutoComplete.closeAnimateImage();">
貌似当全页面只有一个文本框时,自动补全的时候,敲回车键,会弹出到新连接页面,再加个吧:<input id="aaaxxxx" type="text" name="sd2xxxx" style="display: none">
3、js函数:
//人员列表键值对,把人员的姓名作为key,把对应的序号作为value,在后面拿来验证用户是否输入一个不存在的人员进行提交。
var keyValues = []; var goodsCompleteDataSource= [
{'text':'','hints':'','content':'','hiddenText':''
}];
var goodsAutoComplete = null;
onload = function pageLoadHdle(){
var goodsConfiguration = {
instanceName: "goodsAutoComplete",
textbox: document.all("operatorName"),
dataSource:goodsCompleteDataSource
};
goodsAutoComplete = new neverModules.modules.autocomplete(goodsConfiguration);
goodsAutoComplete.callback = function (autocompleteValue, autocompleteContent) {
document.getElementById("operatorName").value=autocompleteValue;
}
goodsAutoComplete.useContent = true;
goodsAutoComplete.useSpaceMatch = true;
goodsAutoComplete.ignoreWhere = true;
goodsAutoComplete.create();
//goodsAutoComplete.expandAllItem();
goodsAutoComplete.showAnimateImage("/hx_choose_person/page/animated_loading.gif");
window.setTimeout(
function closeAnimateImageAfter1seconds() { //设置图片消失时间为1秒
goodsAutoComplete.closeAnimateImage();
}, 1000
);
onLoadGoods();
}
function onLoadGoods(){ //加载人员列表
$.ajax({
type: "POST",
dataType:"json",
data:{id:$("#id_array").val(),type:$("#type_array").val()},
cache: false,
async:false,
url: "/后台servlet路径",
success: function(data){
for(var property in data){
var bean = data[property];
//此处将该数组填充值 keyValues[bean.text] = bean.content;
goodsCompleteDataSource[property]=bean;
}
}
});
}
4、后台servlet查询拼凑字符串方法:
String id = request.getParameter("id");
String type = request.getParameter("type");
List personList = DbUtil.getUserInfoList(id,type);
StringBuffer sbf = new StringBuffer();
sbf.append("[");
for(int i=0; i<personList.size(); i++) {
PersonInfo person = (PersonInfo)personList.get(i);
StringBuffer temp = new StringBuffer();
temp.append("{text:");
temp.append("'"+person.getOperatorName()+"'");
temp.append(",");
temp.append("hints:''");
temp.append(",");
temp.append("content:"+person.getOperatorID());
temp.append(",");
temp.append("hiddenText:'"+person.getOperatorName()+"'}");
sbf.append(temp);
if(i<personList.size()-1) {
sbf.append(",");
}
}
sbf.append("]");
//response.setContentType("text/xml;charset=utf-8");
//response.getWriter().print("[{text:'xzcz',hints:'',content:'22',hiddenText:'xzcz'},{text:'sa',hints:'',content:'22',hiddenText:'sa'}]");
response.getWriter().print(sbf.toString());
5、为了防止用户输入不存在的人员并提交,在提交前验证一下:
function dosubmit(){
var inputvalue = $("#operatorName").val();
if(typeof(inputvalue) != "undefined") { if(typeof(keyValues[inputvalue]) == "undefined") { alert('你指定的人员不存在,请重新选择!');
return;
}
}
......
}