从函数内部获取Id

时间:2013-03-11 09:33:01

标签: javascript leaflet

我在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);
    }

1 个答案:

答案 0 :(得分:1)

在$ .get的成功/错误处理程序中,上下文绑定是event.target,并且在调用事件处理程序之前,您正在迭代的循环已完成。因此,您将获得点击处理程序的最后一个ID。

在控制台上记录此@ var markeren = this;。上下文是您所需要的。 再次在$ .get中记录markeren,这不符合您的预期!

适当地绑定功能上下文,您的问题就会消失。