使用地图从数据库加载marker,遇到一个问题,每次点击窗体都只出现遍历中最后一个的结果。
经过思考,得出结论是遍历的时候,虽然给每个marker加上了打开窗体的方法,但是会被后面的遍历替代,所以应该把方法单独拿出来
opts = {
width : 200, // 信息窗口宽度
height: 80, // 信息窗口高度
title : "事件信息" , // 信息窗口标题
enableMessage:true//设置允许信息窗发送短息
};
//ajax显示Maker(EVENT)
$.ajax({
url:'preplan_event_queryAll.action',
type:'POST',
data:{
},
success:function(res){
var data=eval('('+res+')');
for (var i = 0; i < data.length; i++) {
var point = new BMap.Point(data[i].longitude, data[i].latitude);
var marker = new BMap.Marker(point,
{
icon:eventIcon,
enableMassClear:false //防止被大规模清除
});
points.push(point);
map.addOverlay(marker);
var content = "事件名称: " + data[i].eventName +"<br /> "
+ "上报人: " + data[i].personName +"<br /> "
+ "经度: " + data[i].longitude +"<br /> "
+ "纬度: " + data[i].latitude +"<br /> ";
//调用点击事件
addClickHandler(content,marker);
} //循环结束
}
});
//点击事件
function addClickHandler(content,marker){
marker.addEventListener("click",function(e){
openInfo(" "+content,e)});
}
//生成窗体
function openInfo(content,e){
var p = e.target;
var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);
var infoWindow = new BMap.InfoWindow(content,opts); // 创建信息窗口对象
map.openInfoWindow(infoWindow,point); //开启信息窗口
}
效果: