2013-03-11 11 views
0

У меня проблема с циклом for на карте LeafletJs, по какой-то причине я не могу получить, чтобы он дал мне правильный идентификатор из массива, вместо этого он дал мне последний идентификатор на всех файлах clickevent's , За пределами $.get() Идентификатор отображается правильно. Но внутри я просто получаю последнее в массиве. Можно ли выпустить вариант получения пользовательской руды, есть ли другие способы сделать это.Получить идентификатор из массива внутри функции

for (var i = 0; i < myColumnDefs.length; i++) { 
     var obj = myColumnDefs[i]; 
    // obj.id = i; 
     var latitude = obj.GisLatitude.toFixed(5); 
     var longitude = obj.GisLongitude.toFixed(5); 

    //The correct id 
     console.log(obj.Id); 

     var m = L.marker([latitude, longitude], { icon: greenIcon }).on('click', function (e) { 
     var markeren = this; 
     debugger; 

     $.get(ol.url('~/Map/MapContent/'), {id: m.id }, function(data) { 
      L.popup() 
     .setLatLng(markeren.getLatLng()) 
     .setContent(data) 
     .openOn(map); 
     }); 
     }).addTo(map); 
     m.id = obj.Id; 
     console.log('Latitude: '+latitude + ' - Longitude: ' + longitude); 
    } 
+0

Возможный дубликат [Javascript закрытия внутри петель - простой практический пример] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) –

ответ

1

В успехе/обработчик ошибки $ .get контекста, связанном имеет event.target и цикл вы перебор давно закончен до того, как обработчик события вызывается. Следовательно, вы получаете последний идентификатор обработчиков кликов.

log this @var markeren = this; на пульте. Контекст - это то, что вам нужно. Снова журнал markeren внутри $ .get, и это не будет то, что вы ожидали!

Привяжите контекст функции соответствующим образом, и ваша проблема исчезнет.