我试图在按下 map 上的每个图标时添加一个事件监听器。我将信息存储在数据库中,我想要检索的值是“i”,但是当我输出“i”时,我得到它的最后一个值,即 5(有 6 个对象被绘制到 map 上)
下面是代码,获取 i 值而不是对象本身的最佳方法是什么。
var drawLotLoc = function(id) {
var lotLoc = new GIcon(G_DEFAULT_ICON); // create icon object
lotLoc.image = url+"images/markers/lotLocation.gif"; // set the icon image
lotLoc.shadow = ""; // no shadow
lotLoc.iconSize = new GSize(24, 24); // set the size
var markerOptions = { icon: lotLoc };
$.post(opts.postScript, {action: 'drawlotLoc', id: id}, function(data) {
var markers = new Array();
// lotLoc[x].description
// lotLoc[x].lat
// lotLoc[x].lng
// lotLoc[x].nighbourhood
// lotLoc[x].lot
var lotLoc = $.evalJSON(data);
for(var i=0; i<lotLoc.length; i++) {
var spLat = parseFloat(lotLoc[i].lat);
var spLng = parseFloat(lotLoc[i].lng);
var latlng = new GLatLng(spLat, spLng)
markers[i] = new GMarker(latlng, markerOptions);
myMap.addOverlay(markers[i]);
GEvent.addListener(markers[i], "click", function() {
console.log(i); // returning 5 in all cases.
// I _need_ this to be unique to the object being clicked.
console.log(this);
});
}
});
最佳答案
您遇到关闭问题。您的函数会看到 i
的最后一个值。只需添加另一个闭包即可修复您的错误:
for(var i=0; i<lotLoc.length; i++) {
(function(i){
// ...
})(i); //run the function with i as argument
}//for
关于javascript - 从GEvent获取 "i"的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2439969/