【问题标题】:Javascript - Google Maps - AutofillJavascript - 谷歌地图 - 自动填充
【发布时间】:2016-10-17 03:55:39
【问题描述】:

我有一个要放在一起的表格,我正在尝试让它自动填充我的字段。我已经成功完成了 95%,但是,我很难让纬度/经度线自动填写到相应的表单字段中。

这是我的 HTML

            <div class="control-group">
            <label class="control-label">Address *</label>
                <div class="controls">
                    <input value="" placeholder="Enter the customers full address" class="form-control" id="autocomplete" type="text">
                </div>
        </div>
        <div class="control-group">
            <label class="control-label">House Number</label>
                <div class="controls">
                    <input value="" class="form-control" id="street_number" disabled="true">
                </div>
        </div>
        <div class="control-group">
            <label class="control-label">Street Address</label>
                <div class="controls">                
                    <input value="" class="form-control" id="route" disabled="true">
                </div>
        </div>
        <div class="control-group">
            <label class="control-label">City</label>
                <div class="controls">
                    <input value="" class="form-control" id="locality" disabled="true">
                </div>
        </div>
        <div class="control-group">
            <label class="control-label">State</label>
                <div class="controls">
                    <input value="" class="form-control" id="administrative_area_level_1" disabled="true">
                </div>
        </div>      
        <div class="control-group">
            <label class="control-label">Zipcode</label>
                <div class="controls">
                    <input value="" class="form-control" id="postal_code" disabled="true">
                </div>
        </div>
        <div class="control-group">
            <label class="control-label">Country</label>
                <div class="controls">
                    <input value="" class="form-control" id="country" disabled="true">  
                </div>
        </div>
        <div class="control-group">
            <label class="control-label">Lat</label>
                <div class="controls">
                    <input value="" class="form-control" id="LatLngBounds" disabled="true">
                </div>
        </div>
        <div class="control-group">
            <label class="control-label">Long</label>
                <div class="controls">
                    <input value="" class="form-control" id="LatLngBounds" disabled="true">
                </div>
        </div> 

这是我的 Javascript。

    var placeSearch, autocomplete;
// Need to add Lat / Long to populate field.
    var componentForm = {
        street_number: 'short_name',
        route: 'long_name',
        locality: 'long_name',
        administrative_area_level_1: 'short_name',
        country: 'long_name',
        postal_code: 'short_name',

    };

function initAutocomplete() {
    autocomplete = new google.maps.places.Autocomplete((document.getElementById('autocomplete')),{ types: ['geocode']});
    autocomplete.addListener('place_changed', fillInAddress);
}

    function fillInAddress() {
        var place = autocomplete.getPlace();
            for (var component in componentForm) {
                document.getElementById(component).value = "";
                document.getElementById(component).disabled = true;
            }
            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]];
                        document.getElementById(addressType).value = val;
                    }
            }
    }

【问题讨论】:

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


【解决方案1】:
  1. 您的 HTML 无效。您有两个 id="LatLngBounds" 的元素。
  2. 您没有任何代码来填充表单中的纬度和经度值。

解决这些问题使其对我有用:

代码 sn-p:

    var placeSearch, autocomplete;
     // Need to add Lat / Long to populate field.
    var componentForm = {
      street_number: 'short_name',
      route: 'long_name',
      locality: 'long_name',
      administrative_area_level_1: 'short_name',
      country: 'long_name',
      postal_code: 'short_name',

    };

    function initAutocomplete() {
      autocomplete = new google.maps.places.Autocomplete((document.getElementById('autocomplete')), {
        types: ['geocode']
      });
      autocomplete.addListener('place_changed', fillInAddress);
    }

    function fillInAddress() {
      var place = autocomplete.getPlace();
      for (var component in componentForm) {
        document.getElementById(component).value = "";
        document.getElementById(component).disabled = true;
      }
      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]];
          document.getElementById(addressType).value = val;
        }
      }
      document.getElementById("Latitude").value = place.geometry.location.lat();
      document.getElementById("Longitude").value = place.geometry.location.lng();
    }
    google.maps.event.addDomListener(window, "load", initAutocomplete);
<script src="https://maps.googleapis.com/maps/api/js?libraries=places"></script>
<div class="control-group">
  <label class="control-label">Address *</label>
  <div class="controls">
    <input value="Beacon St, Boston, MA" placeholder="Enter the customers full address" class="form-control" id="autocomplete" type="text">
  </div>
</div>
<div class="control-group">
  <label class="control-label">House Number</label>
  <div class="controls">
    <input value="" class="form-control" id="street_number" disabled="true">
  </div>
</div>
<div class="control-group">
  <label class="control-label">Street Address</label>
  <div class="controls">
    <input value="" class="form-control" id="route" disabled="true">
  </div>
</div>
<div class="control-group">
  <label class="control-label">City</label>
  <div class="controls">
    <input value="" class="form-control" id="locality" disabled="true">
  </div>
</div>
<div class="control-group">
  <label class="control-label">State</label>
  <div class="controls">
    <input value="" class="form-control" id="administrative_area_level_1" disabled="true">
  </div>
</div>
<div class="control-group">
  <label class="control-label">Zipcode</label>
  <div class="controls">
    <input value="" class="form-control" id="postal_code" disabled="true">
  </div>
</div>
<div class="control-group">
  <label class="control-label">Country</label>
  <div class="controls">
    <input value="" class="form-control" id="country" disabled="true">
  </div>
</div>
<div class="control-group">
  <label class="control-label">Lat</label>
  <div class="controls">
    <input value="" class="form-control" id="Latitude" disabled="true">
  </div>
</div>
<div class="control-group">
  <label class="control-label">Long</label>
  <div class="controls">
    <input value="" class="form-control" id="Longitude" disabled="true">
  </div>
</div>

【讨论】:

  • 太棒了。对此,我真的非常感激!我现在很难通过 PHP/Sql 传递它放置在输入字段中的变量。为什么我的表单会发布空白值?
猜你喜欢
  • 2018-04-28
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多