后台返回数组代码
页面代码基本没啥变化。。
因为与其他 js 冲突了 。。 修改了部分
<script language="javascript">
var chuliNum = function (id) {
return "string" == typeof id ? document.getElementById(id) : id;
}
var Bind = function(object, fun) {
return function() {
return fun.apply(object, arguments);
}
}
function AutoComplete(obj,autoObj,arr){
this.obj=chuliNum(obj); //输入框
this.autoObj=chuliNum(autoObj);//DIV的根节点
this.value_arr=arr; //不要包含重复值
this.index=-1; //当前选中的DIV的索引
this.search_value=""; //保存当前搜索的字符
}
AutoComplete.prototype={
//初始化DIV的位置
init : function() {
this.autoObj.style.left = this.obj.offsetLeft + "px";
this.autoObj.style.top = this.obj.offsetTop + this.obj.offsetHeight+ "px";
this.autoObj.style.width = this.obj.offsetWidth - 2 + "px";//减去边框的长度2px
},
//删除自动完成需要的所有DIV
deleteDIV : function() {
while (this.autoObj.hasChildNodes()) {
this.autoObj.removeChild(this.autoObj.firstChild);
}
this.autoObj.className = "auto_hidden";
},
//设置值
setValue : function(_this) {
return function() {
_this.obj.value = this.seq;
_this.autoObj.className = "auto_hidden";
}
},
//模拟鼠标移动至DIV时,DIV高亮
autoOnmouseover : function(_this, _div_index) {
return function() {
_this.index = _div_index;
var length = _this.autoObj.children.length;
for (var j = 0; j < length; j++) {
if (j != _this.index) {
_this.autoObj.childNodes[j].className = 'auto_onmouseout';
} else {
_this.autoObj.childNodes[j].className = 'auto_onmouseover';
}
}
}
},
//更改classname
changeClassname : function(length) {
for (var i = 0; i < length; i++) {
if (i != this.index) {
this.autoObj.childNodes[i].className = 'auto_onmouseout';
} else {
this.autoObj.childNodes[i].className = 'auto_onmouseover';
this.obj.value = this.autoObj.childNodes[i].seq;
}
}
},
//响应键盘
pressKey : function(event) {
var length = this.autoObj.children.length;
//光标键"↓"
if (event.keyCode == 40) {
++this.index;
if (this.index > length) {
this.index = 0;
} else if (this.index == length) {
this.obj.value = this.search_value;
}
this.changeClassname(length);
}
//光标键"↑"
else if (event.keyCode == 38) {
this.index--;
if (this.index < -1) {
this.index = length - 1;
} else if (this.index == -1) {
this.obj.value = this.search_value;
}
this.changeClassname(length);
}
//回车键
else if (event.keyCode == 13) {
this.autoObj.className = "auto_hidden";
this.index = -1;
} else {
this.index = -1;
}
},
//程序入口
start : function(event) {
if (event.keyCode != 13 && event.keyCode != 38
&& event.keyCode != 40) {
this.init();
this.deleteDIV();
this.search_value = this.obj.value;
var valueArr = this.value_arr;
valueArr.sort();
if (this.obj.value.replace(/(^\s*)|(\s*$)/g, '') == "") {
return;
}//值为空,退出
try {
var reg = new RegExp("(" + this.obj.value + ")", "i");
} catch (e) {
return;
}
var div_index = 0;//记录创建的DIV的索引
for (var i = 0; i < valueArr.length; i++) {
if (reg.test(valueArr[i])) {
var div = document.createElement("div");
div.className = "auto_onmouseout";
div.seq = valueArr[i];
div.onclick = this.setValue(this);
div.onmouseover = this.autoOnmouseover(this, div_index);
div.innerHTML = valueArr[i].replace(reg,
"<strong>$1</strong>");//搜索到的字符粗体显示
this.autoObj.appendChild(div);
this.autoObj.className = "auto_show";
div_index++;
}
}
}
this.pressKey(event);
window.onresize = Bind(this, function() {
this.init();
});
}
}
</script>
页面调用部分
<p><span>活动举办场地</span>
<span>
<input type="text" onkeyup="findResult(this,'auto',event)" id="activityAddress" name="activityAddress" placeholder="请输入中文地址">
<!-- <input type="text" onkeyup="autoComplete1.start(event)" id="activityAddress1" name="activityAddress" placeholder="请输入中文地址">
--> </span>
<a id="addButton" class="addAclass" onclick="getAddressFill();">添加场地</a>
<span class="hint2 " id="activityAddressError" ><img src="<c:url value='/resources/risk/images/public/pss_wrong.png' />"/>地址不能为空</span>
</p>
<div class="auto_hidden" id="auto"><!--自动完成 DIV--></div>
<div id="addressmore" >
</div>
调用js
var addressNum=0;
// var autoComplete2,autoComplete1;
function getAddressFill(){
addressNum++;
var strName="activityAddress"+addressNum;
var autoName="auto"+addressNum;
var str="<div class='rep'><div class='clear'></div><p><span> </span><span> <input type='text' onkeyup=\"findResult(this,'"+autoName+"',event)\" id='"+strName+"' name='activityAddress' placeholder='请输入更多的举办地址'/><div class='auto_hidden' id='"+autoName+"'></div></span><a class='addAclass' onclick=\"sys_remove_element($(this),'rep','');\">删除场地</a> </p></div>";
$("#addressmore").append(str);
// if(addressNum=="1" || addressNum==1){
// autoComplete1 = new AutoComplete('activityAddress1','auto1',['b111','b12','b22','b3','b4','b5','b6','b7','b8','b2','abd','ab','acd','accd','b1','cd','ccd','cbcv','cxf']);
// }
// if(addressNum=="2"){
// autoComplete2=new AutoComplete('activityAddress2','auto2',['b111','b12','b22','b3','b4','b5','b6','b7','b8','b2','abd','ab','acd','accd','b1','cd','ccd','cbcv','cxf']);
// }
}
function findResult(obj,autoId,event){
//alert("jinalai");
var city =$("#city").val();
var province =$("#province").val();
//var address= $("#activityAddress").val();
var address=obj.value;
var html="";
if(city!=""&&city!="请选择市"){
$("#activityAddressError").hide();
$.ajax({
url:baseUrl+'/findAddress.json',
data:{
'name':address,
'city':city,
'province':province
},
type:'post', //数据发送方式
async: false,
dataType : "json",
success: function(data){
var myArray=new Array();
for(var i=0;i<data.searchName.length;i++){
myArray.push(data.searchName[i].address);
}
$("#addButton").show();
var autoComplete1 = new AutoComplete(obj,autoId,myArray);
autoComplete1.start(event);
}
});
}
}
<script>
var autoComplete=new AutoComplete('activityAddress','auto',['中国','b12','b22','b3','b4','b5','b6','b7','b8','b2','abd','ab','acd','accd','b1','cd','ccd','cbcv','cxf']);
</script>
后台调用代码
@RequestMapping(value = "/findAddress")
public JSONObject findAddressView(String name ,String city,String province) {
List<DedecmsAddress> list=new ArrayList<DedecmsAddress>();
// List<String> list1=new ArrayList<String>();
// list1.add("中国好声音");
// list1.add("中国好声音1");
// list1.add("中国好声音2");
// list1.add("中国好声音3");
if(city==null||city==""){
return null;
}
city=dataService.findRegionByCode(city).getName();
// //System.out.println(city);
province=dataService.findRegionByCode(province).getName();
if(city.equals("市辖区")||city.equals("县")){
//直接查询 省下的 地址
list=cmsService.findCmsList(province,null);
}else{
list=cmsService.findCmsList(province,city);
}
JSONArray array=new JSONArray();
String []arrayNum= new String[8];//默认只有8个
JSONObject json= new JSONObject();
for (int i = 0; i < list.size(); i++) {
JSONObject address= new JSONObject();
address.put("address", list.get(i).getAddress());
array.add(address);
}
json.put("searchName", array);
// array.add(json);
// System.out.println(array.toString());
return json;
}