ASP.NET使用百度地图JS的API的Marker事件问题

我给地图设置了点击事件,然后会在鼠标点击的位置生成一个marker,然后我在生成这个marker的方法里面从数据库获取了临近点的坐标,并生成另外的marker添加到地图上,并且添加了点击事件,但是现在有两个问题,
1.我想设置点击新生成的标签时候不触发点击地图事件,应该如何做?
2.在方法里新生成的那些标签我设置了点击事件,但是在创建这些标签的时候触发了,而点击却没有触发,这是为什么?
希望大神们帮忙解答一下,感激不尽
以下是相应JS代码

 // 添加地图标记,点击添加标记,然后地图中心设置为点击地点
    map.addEventListener("click", function (e) {
        //map.removeOverlay(onlyMarker);
        map.clearOverlays();
        point.lat = e.point.lat;
        point.lng = e.point.lng;
        onlyMarker.setPosition(point);
        circle.setCenter(point);
        circle.setRadius(1000);
        map.addOverlay(onlyMarker);
        map.addOverlay(circle);
        map.setCenter(point);

        document.getElementById("lat").value = point.lat;
        document.getElementById("lng").value = point.lng;

        $.ajax({
            url: '/Main/GetShopList',
            type: 'POST',
            datatype: 'json',
            data: { lon: point.lng, lat: point.lat },
            success: function (data) {
                var list = JSON.parse(data);
                var tempPoint = new BMap.Point();
                var myIcon = new BMap.Icon("marker.png", new BMap.Size(25, 30));

                for (var i = 0; i < list.length; i++) {
                    tempPoint.lat = list[i].Pos_lat;
                    tempPoint.lng = list[i].Pos_lon;
                    var shoppoint = new BMap.Marker(tempPoint);
                    map.addOverlay(shoppoint);
                    shoppoint.addEventListener("click", function pointclicked(e) {
                        alert("点击了标签"+list[i].ID);
                    });
                }
            },
            error: function (msg) {
                alert("获取失败,请重试");
            }
        })
    });

这种情况下是点击地图会出现点击地点的标记,然后会显示周围的点的标记,同时会提示“点击了标签XX”,但是我点击周围的点都无法触发点击事件,反倒是地图中心点在跟着点击的点换位置,我想让他点击其他标注点不触发地图中心点的点击事件,同时让新增的点的点击事件可用,希望大神们帮忙解决,谢谢

1个回答

因为i为list.length, alert("点击了标签"+list[i].ID);执行这个报错了list[i]为null,要做好闭包

至于创建标记会alert,你这个代码没看出什么问题。。自己检查其他代码

   function createEvt(i) {
        return function () { alert("点击了标签" + list[i].ID); }
    }
    for (var i = 0; i < list.length; i++) {
        tempPoint.lat = list[i].Pos_lat;
        tempPoint.lng = list[i].Pos_lon;
        var shoppoint = new BMap.Marker(tempPoint);
        map.addOverlay(shoppoint);
        shoppoint.addEventListener("click", createEvt(i))
    }
showbo
支付宝加好友偷能量挖,胡杨在等着我的召唤 回复BlinkZero: 肯定不能放外面,放外面引用不到list数组了。
大约 4 年之前 回复
BlinkZero
BlinkZero 谢谢谢谢,解决了一个问题了,感激不尽,我尝试过您这种方法,不过我是把您例子里的createEvt放到了最外面,原来是放到里面就好了,十分感谢
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问