Google Map API在循环输出多个标记时,addListener事件侦听无效?在同时输出多个标记时,addListener中的click事件中,怎么点击每个标记时弹出的提示信息一样?
代码如下: <script type="text/javascript" language="javascript" src="http://maps.google.com/maps?file=api&v=2.81&key=ABQIAAAAT2TW27KPpzTcS3Av9rRZ8xT1F8mZkeCJn7mpiSa3OPXywey-iRS03DLbdWN6xNsN2xcNlCfu7WPgwA"></script>
    <script language="javascript" type="text/javascript">
        function AddPointToMap(loc) {
            if (GBrowserIsCompatible()) {                var loc = "25.048505,121.516701#25.048306,121.516700";                
                var aryLoc = loc.split('#'); //將傳進來的經緯度字串split到陣列  
                var map = new GMap2(document.getElementById("map"));
                map.enableDoubleClickZoom(); //设置可以双击缩放地图,左键双击为放大,右键双击为缩小(默认)。
                map.enableScrollWheelZoom(); //设置地图可以由鼠标滚轮控制缩放。                //加入Google MAP上所要用的Control
                map.addControl(new GLargeMapControl()); //放大缩小调节杆
                map.addControl(new GMapTypeControl()); //地图和卫星图片的切换功能
                map.addControl(new GScaleControl()); //比例尺控件
                var icon = new GIcon(G_DEFAULT_ICON);
                //icon.image = "/images/beachflag.png";                for (var i = 0; i < aryLoc.length; i++) {
                    var x = aryLoc[i].split(',')[0];
                    var y = aryLoc[i].split(',')[1];
                    var point = new GLatLng(x, y); //經緯度
                    var erOptions = { icon: icon, title: x + ";" + y };
                    var er = new GMarker(point, erOptions);
                    map.addOverlay(er); //加入Marker
                    if (i == 0) { map.setCenter(point, 18); } //將地圖的中心設在定一個點
                    GEvent.addListener(er, "click", function() {
                        er.openInfoWindowHtml("标记 <B>" + x+";"+y + "</B>");
                    })
                }
            }
        }
    </script></head>
<body id="MainBody" runat="server">
    <form id="form1" runat="server">
    <div id="map" style="width: 600px; height: 600px">
    </div>
    <span id="sp_msg"></span>
    </form>
</body>

解决方案 »

  1.   

     GEvent.addListener(er, "click", function() {
      er.openInfoWindowHtml("标记 <B>" + x+";"+y + "</B>");
    })

    点击for循环中的标记,所有输出信息都是一样的,这是为什么?
      

  2.   

    你可以试着把该方法封装一下      function AddPointToMap(loc) {
                if (GBrowserIsCompatible()) {                var loc = "25.048505,121.516701#25.048306,121.516700";
                    var aryLoc = loc.split('#'); //將傳進來的經緯度字串split到陣列  
                    var map = new GMap2(document.getElementById("map"));
                    map.enableDoubleClickZoom(); //设置可以双击缩放地图,左键双击为放大,右键双击为缩小(默认)。
                    map.enableScrollWheelZoom(); //设置地图可以由鼠标滚轮控制缩放。                //加入Google MAP上所要用的Control
                    map.addControl(new GLargeMapControl()); //放大缩小调节杆
                    map.addControl(new GMapTypeControl()); //地图和卫星图片的切换功能
                    map.addControl(new GScaleControl()); //比例尺控件
                    var icon = new GIcon(G_DEFAULT_ICON);
                    //icon.image = "/images/beachflag.png";                for (var i = 0; i < aryLoc.length; i++) {
                        var x = aryLoc[i].split(',')[0];
                        var y = aryLoc[i].split(',')[1];
                        var point = new GLatLng(x, y); //經緯度
                        var erOptions = { icon: icon, title: x + ";" + y };
                        //var er = new GMarker(point, erOptions);
                        var er = createMarker(point, erOptions, x);
                        map.addOverlay(er); //加入Marker
                        if (i == 0) { map.setCenter(point, 18); } //將地圖的中心設在定一個點
                        //GEvent.addListener(er, "click", function() {
                            //er.openInfoWindowHtml("标记 <B>" + x + "</B>");
                        //})
                    }
                }
            }
            function createMarker(point, erOptions, html) {
                var er = new GMarker(point, erOptions);
                GEvent.addListener(er, 'click', function() {
                    er.openInfoWindowHtml(html);
                });
                return er;
            }