我在LeafletJs地图中有一个for循环的问题,由于某些原因我无法得到它从数组中给我正确的ID,而是它给了我所有clickevent的最后一个id。在$.get()
之外,ID显示正确。但在里面我只是得到阵列中的最后一个。是否有可能通过其他方式来执行选项以获得自定义。
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 :(得分:1)
在$ .get的成功/错误处理程序中,上下文绑定是event.target,并且在调用事件处理程序之前,您正在迭代的循环已完成。因此,您将获得点击处理程序的最后一个ID。
在控制台上记录此@ var markeren = this;
。上下文是您所需要的。
再次在$ .get中记录markeren
,这不符合您的预期!
适当地绑定功能上下文,您的问题就会消失。