除覆盖物当调用map.removeOverlay或者map.clearOverlays方法时,API会自动将initialize方法返回的DOM元素进行移除。

解决方案 »

  1.   

    变量申明为全局的,在按钮事件中map.removeOverlay()要么你的button按钮点击事件放到addMarker中,这样也可以引用到变量
      

  2.   

    设为全局变量可以了,谢谢哦
    不过,把button的事件removeMarker放到addMarker中?这样button的onclick事件写removeMarker?这样写报错啊
      

  3.   

        function addMarker() {        lng = document.getElementById("txtlng");
            lat = document.getElementById("txtlat");
            var icon = new BMap.Icon("http://api.map.baidu.com/img/ers.png", new BMap.Size(23, 25), {            offset: new BMap.Size(10, 25),
                imageOffset: new BMap.Size(0, 0),   // 设置图片偏移   
                anchor: new BMap.Size(10, 30),
                infoWindowAnchor: new BMap.Size(10, 0)
            });
            //地址解析类  
            var gc = new BMap.Geocoder();
            //初始化地图标记
            var er = new BMap.Marker(new BMap.Point(lng.value, lat.value),
            { icon: icon });
            //添加标记
            map.addOverlay(er);
            //标记点击事件
            er.addEventListener("click", function (e) {
                //                        map.removeOverlay(er);
                //                        er.dispose();            var opts = {
                    width: 250,     // 信息窗口宽度   
                    height: 100,     // 信息窗口高度   
                    title: "test"  // 信息窗口标题
                }
                //获取地址信息
                gc.getLocation(e.point, function (rs) {
                    document.getElementById("txtlng").value = e.point.lng;
                    document.getElementById("txtlat").value = e.point.lat;
                });            var infoWindow = new BMap.InfoWindow("World", opts);  // 创建信息窗口对象
                er.openInfoWindow(infoWindow, new BMap.Point(lng.value, lat.value));      // 打开信息窗口        });

            document.getElementById('buttonid').onclick = function () {            map.removeOverlay(er);
            }

        }
    这样出错?不可能吧。。
      

  4.   

    有没有靠谱点的方法啊。er采用全局变量适用于只有要求有一个er对象的情况,如果有多个,难道建n个全局er对象。
    百度api官方demo采用map.getOverlays方法,获取所有覆盖物对象,通过遍历所有对象找到指定的对象,经个人测试,理论上是可以,但实际是有bug,行不通的,不管通过标题或自定义id属性来定位到er对象,都是有问题的。
    个人感觉百度api不好用