Leaflet .addLayer()函数失败,在控制台上运行

时间:2014-08-04 05:56:07

标签: javascript jquery function leaflet

我认为这意味着我遗漏了一些关于javascript中嵌套函数工作的基本知识,但是我没有在传单地图using a click function中添加或删除图层。具体来说,我有一个传单图,其中定义了许多矢量图层。其中一个图层被添加到地图on page load,然后后续图层将加载到图层选择器中的点击事件。

这是处理点击的功能,然后更新侧边栏图例,更新图层选择器中的类,应该更新可见图层:

// ADD THE LAYER CONTROL FUNCTION
$('.layer').click(function() {
  var oldLayer = $('.active').attr('id');
  var newLayer = $(this).attr('id');
  console.log(oldLayer + ' --> ' + newLayer);
  $('#infobits').html('<h2>' + this.text + '</h2><hr>' + legendFormatter(
    this.id));
  map.removeLayer(oldLayer);
  $('.layer').removeClass('active');
  $(this).addClass('active');
  map.addLayer(newLayer);
});

每当我点击一个新图层时,我得到Uncaught TypeError: undefined is not a function,无论我把函数放在哪里(我甚至把它放在.getJSON()调用中)。令人困惑的是,我在浏览器中访问JS控制台并在上面脚本(map.removeLayer(Percent_TC_bg))的第49行输入逐字函数,地图删除有问题的图层。

如何让我的地图无误地添加和删除图层?

2 个答案:

答案 0 :(得分:5)

我认为TypeErroraddLayer内置removeLayerMap#addLayer#removeLayer接受ILayer个对象作为参数,但oldLayernewLayer显然是String,它直接来自HTML元素&#39; s ID属性。

我认为,将oldLayernewLayer更改为感谢ILayer对象会解决问题。

答案 1 :(得分:2)

编辑:伊戈尔打败了我。

Mics是对的 - HTML元素的ID是一个字符串,并不引用该层。在定义图层以解决此问题后,您可以执行以下操作:

var myLayers = {
    "Percent_TC_bg": Percent_TC_bg,
    "Percent_TC": Percent_TC
};

然后像这样添加处理程序

$('.layer').click(function() {
  var oldLayer = myLayers[$('.active').attr('id')];
  var newLayer = myLayers[$(this).attr('id')];
  // ...
});