【问题标题】:Google Places Autocomplete API Multiple InstancesGoogle Places Autocomplete API 多个实例
【发布时间】:2012-08-20 18:31:40
【问题描述】:

我的网站有问题。在提交表单之前,我使用自动完成功能来查找地址的经纬度。问题是,在我有 2 个实例的页面上,我在 Chrome 中收到错误“'geometry' is null or not an object”,第一个实例不会得到 latlon。

if($('input#searchArea').length){
        var input = document.getElementById('searchArea');
        var options = {
            componentRestrictions: {country: 'uk'}
        }
        var autocomplete = new google.maps.places.Autocomplete(input, options);

        google.maps.event.addListener(autocomplete, 'place_changed', function(){
            var place = autocomplete.getPlace();
            var location = String(place.geometry.location); // The problemed line
            var latLong = location.substr(1, location.length-2);
            latLong = latLong.split(', ');
            if($('input#searchLatLong').length == 0) $('form#findArea').append('<input type="hidden" name="ll" id="searchLatLong" />');
            $('input#searchLatLong').val(latLong[0] + ',' + latLong[1]);
        });
    }

    if($('input#letArea').length){
        var input = document.getElementById('letArea');
        var options = {
            componentRestrictions: {country: 'uk'}
        }
        autocomplete = new google.maps.places.Autocomplete(input, options);

        google.maps.event.addListener(autocomplete, 'place_changed', function(){
            var place = autocomplete.getPlace();
            var location = String(place.geometry.location);
            var latLong = location.substr(1, location.length-2);
            latLong = latLong.split(', ');
            if($('input#letLatLong').length == 0) $('form#letPlaceArea').append('<input type="hidden" name="ll" id="letLatLong" />');
            $('input#letLatLong').val(latLong[0] + ',' + latLong[1]);
        });
    }

以前有人遇到过这种情况吗?

干杯, RJ

编辑:发现问题。变量的名称相同。在第二个实例上更改它们对其进行排序。

干杯, RJ

【问题讨论】:

  • 如果您已经发现问题,请删除问题或发布答案并接受它,以免我们浪费时间。

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


【解决方案1】:
function initialize(pre) {
  window[pre+"autocomplete"] = new google.maps.places.Autocomplete(
      (document.getElementById(pre+'street_address')),
      { types: ['geocode'] });
  google.maps.event.addListener(window[pre+"autocomplete"], 'place_changed', function() {
    fillInAddress(pre);
  });
}

function fillInAddress(pre) {

    var place = window[pre+"autocomplete"].getPlace();

    for (var component in componentForm) {
      document.getElementById(pre+component).value = '';
      document.getElementById(pre+component).disabled = false;
    }

    for (var i = 0; i < place.address_components.length; i++) {
        var addressType = place.address_components[i].types[0];
        if (componentForm[addressType]) {
          var val = place.address_components[i][componentForm[addressType]];
          jQuery("#"+pre+addressType).val(val);
        }
    }
    updateStreet("#"+pre)
}

当然,您需要通过 jQuery 或 onload() 启动两次;

jQuery(function() {
  initialize("foo_")
  initialize("bar_")
});

【讨论】:

    【解决方案2】:

    我不知道这是否是解决此问题的最佳方法,但我已经这样做了:

    function initialize() {
        var input = document.getElementById('searchTextField');
        var options = {
            types: ['(cities)']
        };
        var autocomplete = new google.maps.places.Autocomplete(input, options);
        }
        google.maps.event.addDomListener(window, 'load', initialize);
    
    
    function initialize1() {
        var input = document.getElementById('searchTextFieldedit');
        var options = {
            types: ['(cities)']
        };
        var autocomplete = new google.maps.places.Autocomplete(input, options);
        }
        google.maps.event.addDomListener(window, 'load', initialize1);
    

    希望对您有所帮助, 最好的问候

    【讨论】:

    • 或者(作为更清洁的解决方案),您可以为每个实例启动动态变量,例如:window[prefix+"autocomplete"]
    • 能否请您告诉我为什么这段代码返回未定义给我。 var input = document.getElementsByClassName('map_address'); for (i = 0; i
    【解决方案3】:

    发现问题。变量的名称相同。在第二个实例上更改它们对其进行排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-09
      • 2017-01-23
      • 2018-12-30
      • 1970-01-01
      • 2017-06-12
      • 2022-01-17
      • 2013-04-12
      • 1970-01-01
      相关资源
      最近更新 更多