2010-03-13 6 views
1

Я пытаюсь добавить слушателя событий к каждому значку на карте при его нажатии. Я храню информацию в базе данных, и значение, которое я хочу извлечь, - это «i», однако, когда я выводил «i», я получаю последнее значение, которое равно 5 (на карту наносится 6 объектов)Получение значения «i» из GEvent

Ниже приведен код, что было бы лучшим способом получить значение 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); 
      }); 
     } 
    }); 

ответ

1

У вас есть проблема с закрытием. Ваши функции см. В последнем значении i. Просто добавьте еще одно закрытие, чтобы исправить вашу ошибку:

for(var i=0; i<lotLoc.length; i++) { 
    (function(i){ 
     // ... 
    })(i); //run the function with i as argument 
}//for 
+0

Это сделало это, спасибо большое – cdnicoll