我在我正在构建的一个小项目中使用Gmaps.js api,并在for循环中添加点击事件。这是代码:
for(var i = 0; i < number; i++) {
var entryTime = data[i].datetime;
map.addMarker({
lat: data[i].lat,
lng: data[i].lng,
click: function(){
alert(entryTime);
}
});
}
然而,当点击标记时,我总是得到最后一个数据元素。如何将此功能绑定到每个标记?
答案 0 :(得分:1)
这是预期的行为。 entryTime
变量在click处理程序之外定义和更改;当点击处理程序被触发时,它将警告分配给entryTime
的最后一个值。
一种解决方案是创建一个闭包,以便在创建闭包时创建变量及其值的副本。
for (var i = 0; i < number; i++) {
map.addMarker({
lat: data[i].lat,
lng: data[i].lng,
click: (function (t) {
return function () {
alert(t);
};
})(data[i].datetime)
});
}