传单.addlayer()在功能上失败,在控制台工作
Leaflet .addLayer() fails in function, works at the console
我认为这意味着我错过了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
是在addLayer
或removeLayer
内抛出的。Map#addLayer
和#removeLayer
接受ILayer
对象作为参数,但oldLayer
和newLayer
显然是String
,这直接来自HTML元素的ID属性。
所以改变oldLayer
和newLayer
来欣赏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')];
// ...
});
相关文章:
- 只有当Javascript控制台在chrome上打开时,Javascript才能工作
- 控制台.log在 setInterval 中无法为 Tampermonkey 工作
- 如何让JavaScript控制台用户输入工作(node.js)
- 当控制台不在't在chrome中打开,有些项目不再可点击(有些js调用停止工作)
- addEventListener工作's,但控制台发送警告
- 登录控制台可以工作,但会立即导致TypeError
- ActiveX 仅在激活 IE 9 控制台时工作
- 无法获得控制台.log在 CasperJS 中评估内部工作
- 火狐插件控制台.log() 不工作
- Chrome - JavaScript 控制台无法正常工作
- JS仅在控制台.log之后工作
- javascript 的 document.getElementById 返回 null,但从控制台工作
- JSON.解析不能在代码中工作,但在开发人员控制台工作得很好
- 传单.addlayer()在功能上失败,在控制台工作
- 代码在控制台工作,但加载网站时不工作
- MarginLeft不工作在IE/Firefox内的功能(但从控制台工作)
- jwplayer getDuration在chrome控制台工作,但不能在c#与IJavaScriptExecutor
- JS代码在控制台工作,不像普通的web代码那样工作
- 文档准备好了,页面加载时没有击中,但它使用开发人员工具控制台工作
- AngularJS数组不是在View Load加载,而是在警报/控制台工作