Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.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地图_Javascript_Jquery_Google Maps_Dynamic Data - Fatal编程技术网

Javascript 初始化动态添加的Google地图

Javascript 初始化动态添加的Google地图,javascript,jquery,google-maps,dynamic-data,Javascript,Jquery,Google Maps,Dynamic Data,我已经写了一个表单,其中包括一个谷歌地图,并使用“地点自动完成”。在同一个页面上,我有一个按钮来添加另一个位置,因此我正在添加另一个MapCanvas div,并尝试初始化地图的另一个副本 我对Google Map javascript进行了如下修改,以便能够将变量传递给函数以附加到不同的元素: <script> function initialize(mapid) { var mapOptions = { center: new google.maps.LatLng(5

我已经写了一个表单,其中包括一个谷歌地图,并使用“地点自动完成”。在同一个页面上,我有一个按钮来添加另一个位置,因此我正在添加另一个MapCanvas div,并尝试初始化地图的另一个副本

我对Google Map javascript进行了如下修改,以便能够将变量传递给函数以附加到不同的元素:

<script>
function initialize(mapid) {
  var mapOptions = {
    center: new google.maps.LatLng(51.5112139, -0.1198244),
    zoom: 9,
    disableDefaultUI: true,
    mapTypeControl: false,
    scaleControl: true,
    zoomControl: true,
    zoomControlOptions: {
      style: google.maps.ZoomControlStyle.SMALL 
    },
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  var map = new google.maps.Map(document.getElementById('map-canvas' + mapid),
    mapOptions);

  var input = (document.getElementById('input' + mapid));
  var autocomplete = new google.maps.places.Autocomplete(input);
  autocomplete.bindTo('bounds', map);
  var infowindow = new google.maps.InfoWindow();
  var marker = new google.maps.Marker({
    map: map
  });
  google.maps.event.addListener(autocomplete, 'place_changed', function() {
    infowindow.close();
    marker.setVisible(false);
    var place = autocomplete.getPlace();
    if (!place.geometry) {
      return;
    }
    if (place.geometry.viewport) {
      map.fitBounds(place.geometry.viewport);
    } else {
      map.setCenter(place.geometry.location);
      map.setZoom(17); 
    }
    marker.setIcon(({
      url: place.icon,
      size: new google.maps.Size(71, 71),
      origin: new google.maps.Point(0, 0),
      anchor: new google.maps.Point(17, 34),
      scaledSize: new google.maps.Size(35, 35)
    }));
    marker.setPosition(place.geometry.location);
    marker.setVisible(true);
    var address = '';
    if (place.address_components) {
      address = [
        (place.address_components[0] && place.address_components[0].short_name || ''),
        (place.address_components[1] && place.address_components[1].short_name || ''),
        (place.address_components[2] && place.address_components[2].short_name || '')
      ].join(' ');
    }
    infowindow.setContent('<div><strong>' + place.name + '</strong><br>' + address);
    infowindow.open(map, marker);
  });
}

//google.maps.event.addDomListener(window, 'load', initialize);
$( document ).ready(function() {
    initialize(1);
});
</script>

如果我注释掉
initialize(m)
调用,它会创建一个空井,所以我知道调用正在做一些事情来打破它。我已经确认了m变量,它计算已经存在的。井div的数量,正确地计算了正确的数量。那么,为什么加载文档时,
initialize(1)
起作用,但在“on('Click')”函数上,它会在那里中断?

在这种情况下,新创建的映射缺少一个输入字段来绑定自动完成,但是多亏了twil推荐了JSFIDLE,这使我能够比在本地玩的乱七八糟的代码更容易发现问题。

错误是什么?本质上没有错误。但是页面会跳转到下一页(id=“addMap”附加到一个按钮,这就是函数返回false的原因)。如果我注释掉
initialize(m)
,该函数将创建一个空井。按钮是
中唯一的按钮?不,还有一个
也要提交表单。Hm。你能做一个三明治吗?
$(function() {
    var mapdiv = $('.parentclass');
    var m = $('.parentclass div.well').size() + 1;
    $('#addMap').on('click', function() {
        $('<div class="well"><div id="map-canvas'+m+'" class="map-canvas"></div></div>').appendTo(mapdiv).hide().fadeIn('60');
        initialize(m);
        m++;
        return false;
    });
});;