BlinkZero
BlinkZero
采纳率66.7%
2016-06-07 03:32 阅读 1.5k
已采纳

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条回答 默认 最新

  • 已采纳
    showbo GoCityPass新加坡曼谷通票 2016-06-07 04:00

    因为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))
        }
    
    点赞 评论 复制链接分享

相关推荐