【发布时间】:2016-08-21 10:10:51
【问题描述】:
我有一个地图应用程序,它在菜单中列出了不同的地图层,每个层都有一个特定的类名。
当用户单击名称时使用此类名称,以便可以将图层添加到地图中或从地图中删除,也可以从地图键中添加/删除图层。
这工作正常,但我正在努力在每个图层名称旁边添加一个小十字,以便用户可以将它们从地图键中删除。
我的代码如下 - 我尝试包含一个 onclick 函数,该函数采用图层 ID 并尝试在函数中使用它,但出现错误:
未捕获的错误:语法错误,无法识别的表达式:.icon[object 对象]
由于我的变量现在是一个对象,我是否需要以不同的方式指定 lid?
这里的 html 显示了使用类 ID 的层的列表选项:
<li class='last layerlist' id='layer63'><a href='#'><i class="fa fa-circle fa-lg iconlayer63"></i><span> Flood Zone 2</span></a></li>
下面的 Javascript 显示了当用户单击列表时会发生什么,它获取 id,然后使用它来获取图层名称(与 id 相同)以隐藏或显示图层,具体取决于是否它是可见的:
//Change layer visibility and add / remove from map key
$(".layerlist").click(function() {
var lid = $(this).attr('id');
map.getLayers().forEach(function(layer) {
if (layer.get('name') == lid) {
var visibility = layer.getVisible();
if (visibility == false) {
layer.setVisible(true);
$(".icon" + lid).removeClass("fa-circle").addClass("fa-check-circle");
$("#map-content").append("<p id='" + lid + "key'><a href='#'><i class='fa fa-times-circle' onclick='removeLayer(" + lid + ");'></i></a><img src='img/legend/" + lid + ".png' alt='Layer image'/> " + layer.get('label') + "</p>");
}
if (visibility == true) {
layer.setVisible(false);
$(".icon" + lid).removeClass("fa-check-circle").addClass("fa-circle");
$("#" + lid + "key").remove();
}
}
});
});
//Remove selected layer from map key
function removeLayer(lid) {
lid.setVisible(false);
$(".icon" + lid).removeClass("fa-check-circle").addClass("fa-circle");
$("#" + lid + "key").remove();
}
【问题讨论】:
-
你能提供一个HTML代码的例子吗?
-
lid 是一个被强制转换为字符串的对象,因此是 [object Object],您能详细介绍一下 lid 吗?
-
remove layer 需要一个
layer对象,而您正在向它传递一个字符串 - 这显然不起作用:) -
部分
removeLayer期望参数lid是一个对象:lid.setVisible(false);几乎所有其他东西都将它用作字符串,例如:$(".icon" + lid)...那是什么setVisible行应该怎么做? -
是的 lid.setVisible(false) 应该从地图中删除地图层。我尝试了您的建议 T.J 添加引号并且它有效,但这部分没有 - 大概是因为这需要对象,而其他两行需要它作为字符串。
标签: javascript function variables constructor javascript-objects