今天做项目的时候,在百度地图上多个marker添加监听,但是总是监听到一样的值,监听到最后一个值。
错误的写法
for (var i = 0; i < positionList.length; i++) {
var position = positionList[i];
var point = new BMapGL.Point(position.longitude, position.latitude);
// 创建标注图标
var myIcon = new BMapGL.Icon(aa, new BMapGL.Size(30, 30));
var marker = new BMapGL.Marker(point, {
icon : myIcon,
});
map.addOverlay(marker);
// 标注监听
pointArray[i] = new BMapGL.Point(position.longitude, position.latitude);
marker.addEventListener("click", attribute);
function attribute() {
getOne(position.vin);
}
}
getOne(position.vin);是我自己的另一个方法,传进去一个参数
这段代码运行的结果是不管点击哪个标点,传进去的都是最后一个vin值
正确的代码
pointArray[i] = new BMapGL.Point(position.longitude, position.latitude);
marker.addEventListener("click", attribute);
var attribute = function(i) {
return function(event) {
getOne(i);
};
}(position.vin);