Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不同标记的重复单击事件侦听器:google maps_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 不同标记的重复单击事件侦听器:google maps

Javascript 不同标记的重复单击事件侦听器:google maps,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,导言 我正在使用谷歌地图,显示具有不同信息窗口的标记。我正在进行一个ajax调用,用相关信息窗口更新地图标记。成功调用ajax后,调用map render函数并“正确地”更新贴图 问题 在ajax调用之后,map会更新,但问题是每个标记都有相同的重复信息窗口。换句话说,infowindow不分别与标记绑定 Javascript代码 我确信问题出在clickEventListener上。评论仅供参考 //开始贴图渲染 函数renderMap(dd){ console.log('after',dd)

导言

我正在使用谷歌地图,显示具有不同信息窗口的标记。我正在进行一个ajax调用,用相关信息窗口更新地图标记。成功调用ajax后,调用map render函数并“正确地”更新贴图

问题 在ajax调用之后,map会更新,但问题是每个标记都有相同的重复信息窗口。换句话说,infowindow不分别与标记绑定

Javascript代码

我确信问题出在clickEventListener上。评论仅供参考

//开始贴图渲染
函数renderMap(dd){
console.log('after',dd);
对于(var a=0;a

我正在试图找出哪里出了问题,现在转向了这个问题,如果有人对这个问题有想法或知识,请帮忙。谢谢您的时间。

请查看Leigh的精彩答案


问题在于如何创建信息窗口,而不是我认为的事件处理程序。

您确定每次调用AJAX后都要重新生成映射吗?@LinShihHao感谢您的回复,是的,我正在考虑其他选项,我认为问题不在于事件处理程序,而在于如何创建信息窗口。希望这能有所帮助我们鼓励下层选民说出原因。这样我可以改进这个问题。@LinShihHao谢谢你的提示,这确实解决了问题,我已经在这个问题上遇到了困难,但没有给予足够的重视。您可以将其作为答案发布,也可以将其标记为重复。而不是李
//map rendering start
                function renderMap(dd) {
                    console.log('after ', dd);
                    for (var a = 0; a < dd; a++) {
                        console.log('after ', dd);
                    }
                    var dataArr = [];
                    var mapProp = {
                        center: abc,
                        zoom: 12,
                        mapTypeId: google.maps.MapTypeId.ROADMAP
                    };
                    map = new google.maps.Map(document.getElementById("googleMap"), mapProp);

                    for (var a = 0; a < dd.length; a++) {
                        dataArr.push({ location: new google.maps.LatLng(dd.location.coordinates[1], dd.location.coordinates[0]), weight: 2 });
                        var contentString = dd;
                        var infowindow = new google.maps.InfoWindow({
                            content: contentString
                        });

                        var marker = new google.maps.Marker({
                            position: { lat: dd.location.coordinates[1], lng: dd.location.coordinates[0] },
                            label: "B",
                            map: map
                        });
                        console.log("before event listener", contentString);//Correctly displayed
                        google.maps.event.addListener(marker, 'click', function () {
                            //when click on marker, console is logged
                            console.log("after event listener", contentString);//Wrongly log same contentString
                            infowindow.open(map.get('map'), marker);
                        });

                            // Add circle overlay and bind to marker
                          var circle = new google.maps.Circle({
                                map: map,
                                radius: 5000,    // 10 miles in metres
                                fillColor: '#4682b4'
                            });

                        circle.bindTo('center', marker, 'position');
                        //console.log(e.location] + ',' + e.location.coordinates[0]);

                        //start of inner for
                    }
                    var heatmap = new google.maps.visualization.HeatmapLayer({
                        data: dataArr
                    });
                }
                //map rendering end
                function ajaxHeatMapHandler() {
                    var dataEl = $('#heatmapFilterArea');

                    var data = {};

                    //make ajax resquest
                    $.ajax({
                        type: "POST",
                        url: "/",
                        data: data,
                        success: function (response, status) {
                            heatmapTitle.text(responselength + ' entries');
                            renderMap(response);
                        },
                    });

                }