为什么谷歌地图JavaScript第二次点击时没有正确显示地图?

时间:2012-05-23 08:06:55

标签: javascript google-maps google-maps-api-3

我正在使用Google Maps JavaScript API v3在我的网络应用程序中显示地图上的位置。在我的HTML中,我有:

<script src="jquery-mainpage.js"></script>
<script type="text/javascript"
    src="http://maps.googleapis.com/maps/api/js?key=AIzaSyB4LCwxrO5EzHnAQXCkP9fjREUEhOPCol4&sensor=false">
</script>

这就是我在jquery-mainpage.js点击更新按钮时制作地图的方式:

$('#updatebtn').unbind("click");
$('#updatebtn').bind('click', function(){
    var keystring = $('#key').text();
    $.ajax({
        type: 'POST',
        url: 'http://localhost:8888/jsgooglemaps',
        data: {keystr: keystring},
        success: function(result) {
            var obj = jQuery.parseJSON(result);
            var centerLatLng = new google.maps.LatLng(obj.centerLat, 
                obj.centerLong);
            var myOptions = {
                center: centerLatLng,
                zoom: 17,
                mapTypeId: google.maps.MapTypeId.ROADMAP,
                draggable: true
            };

            var map = new google.maps.Map(
                document.getElementById("map_canvas_1"),
                myOptions);

            var markerArray = obj.locations;
            for(var i=0;i<markerArray.length;i++){
                var myLatlng = new google.maps.LatLng(
                    markerArray[i].latitude, 
                    markerArray[i].longitude);
                var marker = new google.maps.Marker({
                    clickable: true,
                    position: myLatlng,
                    map: map,
                    zIndex: i
                });
                google.maps.event.addListener(marker, "click", function() {
                    var tempLatLng = new google.maps.LatLng(0, 0);
                    this.setVisible(false); 
                    this.setPosition(tempLatLng);
                    var j = this.getZIndex();
                    markerArray[j].latitude = 0;
                    markerArray[j].longitude = 0;
                });
            }
        }
    });
});

首次点击它会显示一切正确。但是当我再次点击更新按钮时,它不会显示正确的地图。我正在附上两个屏幕截图。任何人都可以告诉我它为什么会发生。提前致谢。 首先点击地图enter image description here

再次点击更新按钮时映射enter image description here

3 个答案:

答案 0 :(得分:2)

您不希望重复创建地图的新实例,因为存在一个已知错误,该错误会阻止先前地图实例的内存被垃圾回收。查看此问题以及讨论和得到的答案:What is the Proper Way to Destroy a Map Instance?

在该问题的答案中,Google地图团队的Chris Broadfoot和Luke Mahe在谷歌地图办公时间会议期间提供的视频链接说明他们不支持涉及重复创建地图的用例实例。保留单个地图实例并在整个用户会话中重复使用相同的地图会更好。

答案 1 :(得分:0)

我正在从ajax成功代码创建map_convas_1 div并在更新完成后将其删除。然后在用户单击更新按钮时再次创建它。工作正常。

答案 2 :(得分:0)

有效。非常感谢,你的“从div中删除代码”选项适用于我,我的问题是第二次它不起作用,如果我正在调整屏幕大小它工作但不是用户调整屏幕大小的自然方式看地图。

我正在使用Jquery删除div代码。在我的情况下,我使用的是jquery对话框,然后当我关闭对话框时,我正在使用原始div代码替换div中的html(谷歌地图显示地图)。

我原来的div代码是

<div id="mapaLocalsub" style="width:500px; height:450px; " ></div>

我注意到谷歌地图工作后它用很多东西和风格填充div,然后在我的Jquery.dialog的close函数中我用我原来的div代码替换html:

$( "#mapaLocal" ).dialog({
      height: 450,
      width: 500,
      modal: true,
      close: function() {
      $( "#mapaLocal" ).html("<div id=\"mapaLocalsub\" style=\"width:500px;     height:450px; \" ></div>");
      }
});

但是,当然,您可以在关闭函数时或创建地图之前调用的函数中使用Jquery html方法,希望它有所帮助。

$( "#mapaLocal" ).html("<div id=\"mapaLocalsub\" style=\"width:500px;     height:450px; \" ></div>");