我认为这意味着我遗漏了一些关于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行输入逐字函数,地图删除有问题的图层。
如何让我的地图无误地添加和删除图层?
答案 0 :(得分:5)
我认为TypeError
或addLayer
内置removeLayer
。 Map#addLayer
和#removeLayer
接受ILayer
个对象作为参数,但oldLayer
和newLayer
显然是String
,它直接来自HTML元素&#39; s ID属性。
我认为,将oldLayer
和newLayer
更改为感谢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')];
// ...
});