繁体   English   中英

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

[英]Why Google Maps JavaScript is not showing a map right when i click it second time?

我正在使用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;
                });
            }
        }
    });
});

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

当我再次点击更新按钮时映射 在此输入图像描述

您不希望重复创建映射的新实例,因为存在一个已知的错误,该错误会阻止以前的映射实例的内存被垃圾回收。 看看这个问题以及讨论和得到的答案: 什么是破坏地图实例的正确方法?

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

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

有用。 非常感谢,你的“从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>");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM