BlinkZero 2016-06-07 03:32 采纳率: 66.7%
浏览 1520
已采纳

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

  • Go 旅城通票 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))
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB动图问题
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题