Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从传单中的下拉列表中选择背景层_Javascript_Jquery_Leaflet - Fatal编程技术网

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");
    });