操纵FeatureGroup中的单个标记

时间:2014-09-04 01:56:17

标签: javascript leaflet

任何人都可以帮我解决如何在FeatureGroup中更新传单的标记吗?我在组中有数百个标记,但是想要用户点击标记的图标进行更改。到目前为止我的代码:

var swpts=new L.FeatureGroup();

var data; //an array of information for the markers

for (i=0; i<data.length; i++){

            ticon=L.icon({
                ...//some stuff that has different types of icons for the different markers
            });

            var tmarker=L.marker([data[i].lat,data[i].lon], {icon: ticon});

            tmarker.on('click', function(i){
                return function(){

                    tmarker.setIcon(icons[include(nidilist,nidi)]);
                    //function to pull a new kind of icon out of an array icons
                    //plus other things to happen when the listener is activated which require
                    //access to i   
                };
            }(i),false);
            swpts.addLayer(tmarker);
};

swpts.addTo(map);

听众可以正常使用其他操作,但我似乎无法操纵FeatureGroup中的实际标记。通常我没有问题,标记能够在监听器中引用自己,所以我不确定为什么.setIcon在这里不起作用。我还尝试添加一个只更改图标的简单监听器,但这也不起作用。感谢您提供任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

你有没有试过在浏览器开发工具中调试或只是在返回函数中控制sth而不是.setIcon()来查看它是否真的被调用了?

tmarker.on('click', function(i){
  return function(){
    console.info('test if called when click');
    //tmarker.setIcon(icons[include(nidilist,nidi)]);
  };
}(i),false);

实际上我猜你只是试图返回一个匿名函数(永远不会被执行)所以它可能无法正常工作。并且.on()[api] https://www.mapbox.com/mapbox.js/api/v2.0.1/l-events/ <中的参数可能有问题。 / p>

tmarker.on('click', function(){
    console.info('this will be called when click');
    //tmarker.setIcon(icons[include(nidilist,nidi)]);
});