Javascript 从传单中的下拉列表中选择背景层
我正在制作一张传单地图,我希望能够从导航栏的下拉菜单中选择背景层Javascript 从传单中的下拉列表中选择背景层,javascript,jquery,leaflet,Javascript,Jquery,Leaflet,我正在制作一张传单地图,我希望能够从导航栏的下拉菜单中选择背景层 <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Bakgrunnka
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Bakgrunnkart
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#" id="basemap-osm" value="OpenStreetMap_Mapnik">OSM</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#" id="basemap-water-colour" value="Stamen_Watercolor">Water colour</a>
<div class="dropdown-divider"></div>
</div>
</li>
我在标记中添加了一个值属性,该属性的名称与层的定义相同。不确定这是否是非常“黑客”的良好实践,仍然在学习
我想将所选图层添加到我的“基本地图”图层组,以便在地图上显示它
例如
var OpenStreetMap_Mapnik=L.tillelayer('https://{s}.tile.OpenStreetMap.org/{z}/{x}/{y}.png'{
maxZoom:19,
属性:“©;”
});
设basemaps=L.layerGroup()
.addLayer(OpenStreetMap_Mapnik)//要显示的默认图层
.addTo(地图);
$(“.dropdown item”)。单击(函数(事件){
event.preventDefault();
让selectedLayer=($(this.attr(“value”));
console.log(selectedLayer);
basemaps.clearLayers()
basemaps.addLayer(selectedLayer);
});
但是因为“$(this).attr(“value”)”返回一个字符串而不是实际的层变量,所以我得到一个typeError
你知道我该怎么解决这个问题吗?我对js很陌生,所以我边走边学….=) 很抱歉我在这里发布了帖子:我无法发表评论,因为我没有足够的观点
- 第一:您是否尝试在函数末尾添加“防止默认值”李>
$(this).attr("key","value");
或者如果你有多个参数
$(this).attr({
key:"value",
key2:"value"
});
第三:您是否尝试过在内部使用回调函数:
像这样:
$("body").on("click","Mention_a_parent_if_you_have dropdownitem",function(data){
var myItem = ($(this).closest('dropdown-item')).data();
myItem.attr("Key","value");
});
谢谢你的建议。我一回到办公桌前就会试试,并告诉你结果。谢谢如果我不理解这个错误,你所有的建议都会将属性设置为下拉项。但是属性已经设置好了,我需要得到它,但不像我当前的代码那样是字符串。现在我已经通过使用switch case返回变量而不是字符串来解决这个问题。但我希望有一种更流畅的方法来实现这一点。你的意思是:你想将字符串序列化为一组对象吗?如果是,请尝试使用Jquery元素和Json newtonsoft库解析你的字符串,如下所示:“函数ConvertStringToObject(Element){stringy=Element.d;var array=Jquery.ParseJSON(stringy);alert”(“这将给你[object object]“+array);//我希望您想要的}可能是重复的,除非我逆向思考,否则我的问题不是将对象附加到元素。我想要的是获取(已经硬编码)作为变量而不是字符串的元素属性。您可能看到了如何反向实现您的目标。您有很多解决方案,链接帖子在jQuery方式中是最通用的。简单的JS解决方案将使用字典。不,对不起,我不明白。我试过这个层=$(this)。data('foo',{bar:'OpenStreetMap_Mapnik});obj=($(this.data('foo'));console.log(typeof(obj['bar']);仍在返回字符串将对象替换为平铺层对象。
$("body").on("click","Mention_a_parent_if_you_have dropdownitem",function(data){
var myItem = ($(this).closest('dropdown-item')).data();
myItem.attr("Key","value");
});