代码之家  ›  专栏  ›  技术社区  ›  ToddN Ata S.

Google Place Autcomplete Address API强制关闭HTML Autocomplete=Off

  •  4
  • ToddN Ata S.  · 技术社区  · 6 年前

    我们有一个地址的标准表格(街道1,街道2,城市,州,邮编,国家)。

    <input autocomplete="address-line1" type = "text" name = "shipping_address_1" id = "shipping_address_1"   class="ct-required form-control" tabindex=7>
    

    关于如何纠正这一点的任何想法;为什么Google会将字段改为 autocomplete='off' ?

    我曾尝试将googlejavascript变量“autocomplete”修改为“autocomp”,认为这与此有关,但结果仍然相同。

          var placeSearch, autocomp;
      var componentForm = {
        shipping_address_1: 'short_name',
        shipping_address_2: 'long_name',
        shipping_city: 'long_name',
        shipping_state: 'short_name',
        shipping_country: 'long_name',
        shipping_zip: 'short_name'
      };
    
    
    
      function initAutocomplete() {
        // Create the autocomplete object, restricting the search to geographical
        // location types.
        autocomp = new google.maps.places.Autocomplete(
            /** @type {!HTMLInputElement} */(document.getElementById('shipping_address_1')),
            {
                types: ['geocode'],
                componentRestrictions: {country: "us"}
            });
    
        // When the user selects an address from the dropdown, populate the address
        // fields in the form.
        autocomp.addListener('place_changed', fillInAddress);
      }
    
      function fillInAddress() {
        // Get the place details from the autocomplete object.
        var place = autocomp.getPlace();
        //debug autofillinplaes
        console.log(place);
    
    
        for (var component in componentForm) {
          document.getElementById(component).value = '';
          document.getElementById(component).disabled = false;
        }
    
    if (place.address_components) {
        // Get each component of the address from the place details
        // and fill the corresponding field on the form.
    
        var components_by_type = {};
    
        for (var i = 0; i < place.address_components.length; i++) {
          var addressType = place.address_components[i].types[0];
          var c = place.address_components[i];
          components_by_type[c.types[0]] = c;
    
        }
         var streetnumb = components_by_type['street_number'].short_name;
    
              var address1 = streetnumb+" "+components_by_type['route'].long_name;
                document.getElementById('shipping_address_1').value = address1;
    
             var locality = components_by_type['locality'].long_name;     
            document.getElementById('shipping_city').value = locality;
    
             var administrative_area_level_1 = components_by_type['administrative_area_level_1'].short_name;      
            document.getElementById('shipping_state').value = administrative_area_level_1;
    
              var country = components_by_type['country'].short_name;             
            document.getElementById('shipping_country').value = country;
    
              var postal_code = components_by_type['postal_code'].short_name;         
            document.getElementById('shipping_zip').value = postal_code;
    ... [DO ADDRESS VALIDATION, UPDATE INPUT FIELDS] ...}
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Jaikanth J    6 年前
    autocomp = new google.maps.places.Autocomplete(
    document.getElementById('shipping_address_1')),
            {
                types: ['geocode'],
                componentRestrictions: {country: "us"}
            });
    

    如果您想这样做,可以使用webserviceapi,发送HTTP请求并用响应填充字段。

    在以加利福尼亚州旧金山为中心的区域内建立含有字符串“阿米巴”的机构的请求: https://maps.googleapis.com/maps/api/place/autocomplete/xml?input=Amoeba&types=establishment&location=37.76999,-122.44696&strictbounds&key=YOUR_API_KEY input=Paris&types=geocode 将给出一个包含预测的JSON对象。

    {
      "status": "OK",
      "predictions" : [
          {
             "description" : "Paris, France",
             "id" : "691b237b0322f28988f3ce03e321ff72a12167fd",
             "matched_substrings" : [
                {
                   "length" : 5,
                   "offset" : 0
                }
             ],
        ... more results
        ]
    }