首页 > 解决方案 > 循环 jQuery 脚本以获取元素列表

问题描述

我有以下 jQuery 脚本,我需要为一长串对象执行该脚本。

$("#ID_001").change(function(event) {
    event.preventDefault();
    if(map.hasLayer(ID_001)) {
        $(this).removeClass('selected');
        map.removeLayer(ID_001);
    } else {
        map.addLayer(ID_001);
        $(this).addClass('selected');
   }
});

我做了什么

使用以下资源:

我认为这不是上述问题的重复问题,因为这包括一个事件处理函数。

我已经编写了以下循环,但这仍然不起作用。我不明白问题出在哪里。

var obj = {
    "#ID_001": "ID_001",
    "#ID_002": "ID_001"
  };

  $.each( obj, function( key, value ) {
    $(key).change(function(event) {
        event.preventDefault();
        if(map.hasLayer(value)) {
            $(this).removeClass('selected');
            map.removeLayer(value);
        } else {
            map.addLayer(value);
            $(this).addClass('selected');
       }
    });
  });

谁能向我解释问题出在哪里?

更多详细信息

该脚本是 LeafLet 地图控制按钮的一部分。当我单击#ID_001元素时,Chrome DevTool 会显示此错误消息,因此我认为问题在于value变量没有获得正确的值。

未捕获的类型错误:无法在 HTMLInputElement 的 i.hasLayer (Layer.js:211) 的 m (Util.js:56) 上的字符串“L_puntiA”上创建属性“_leaflet_id”。(mymap_main.js:103) 在 HTMLInputElement.dispatch (jquery-3.3.1.slim.min.js:2) 在 HTMLInputElement.v.handle (jquery-3.3.1.slim.min.js:2)

标签: javascriptjqueryloopsleafleteach

解决方案


如评论中所述,您的问题是您使用字符串而不是变量定义对象。

代替:

var obj = {
  "#ID_001": "ID_001",
  "#ID_002": "ID_001"
};

利用:

var obj = {
  "#ID_001": ID_001,
  "#ID_002": ID_002
};

推荐阅读