传单.addlayer()在功能上失败,在控制台工作

Leaflet .addLayer() fails in function, works at the console

本文关键字:控制台 工作 失败 功能上 传单 addlayer      更新时间:2023-09-26

我认为这意味着我错过了javascript中嵌套函数工作的一些基本知识,但我未能使用单击函数从传单地图添加或删除图层。具体来说,我有一个传单地图,其中定义了许多矢量图层。其中一个图层在页面加载时添加到地图中,然后在图层选择器中的点击事件中加载后续图层。

下面是处理点击的函数,然后更新侧边栏图例,更新图层选择器中的类,并且应该更新可见层:
// 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行上产生的内容,则映射删除了有问题的层。

我能做些什么来获得我的地图添加和删除层没有错误?

我想TypeError是在addLayerremoveLayer内抛出的。Map#addLayer#removeLayer接受ILayer对象作为参数,但oldLayernewLayer显然是String,这直接来自HTML元素的ID属性。

所以改变oldLayernewLayer来欣赏ILayer对象将解决问题,我想。

编辑:我抢先一步。

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')];
  // ...
});