2013-03-11 71 views
0

我在LeafletJs地圖中有一個for循環的問題,出於某種原因,我無法得到它給了我一個數組的正確ID,而是它給了我所有clickevent的最後一個id 。在$.get()之外,Id顯示正確。但在裏面,我只是得到陣列中的最後一個。是否有可能執行選項來獲得自定義的一個礦石還有其他方式來做到這一點。Get Array from Array裏面函數

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) – 2013-03-11 09:35:10

回答

1

在成功/不用彷徨結合上下文的$錯誤處理程序是event.target和事件處理程序調用之前你迭代循環早已結束。因此,您可以在點擊處理程序上獲取最後一個ID。

在控制檯上登錄@var markeren = this;。上下文就是你所需要的。 再次在$ .get內部登錄markeren,它不會是你所期望的!

適當地綁定函數上下文,你的問題就會消失。