2015-03-03 5 views
0

J'ai donc travaillé d'un jour à rendre mon formulaire de saisie semi-automatique. Vérifiez ce lien ci-dessous:Google autocomplete ignorer l'adresse complète

http://test.oliveenterprisedemo.in/

Il a le code de saisie semi-automatique Google.

Il fonctionne parfaitement bien, sauf la grande adresse

Par exemple: Si j'entre «The Rise, Blackrock, Irlande Je l'obtenir triée dans des boîtes différentes correctement. Mais si j'entre dans '6 The Rise, à Owenabue Heights, à Carrigaline, dans le comté de Cork, en Irlande' il saute les hauteurs owenabue que je ne veux pas avoir.

je me suis dit que cela a quelque chose à voir avec componentForm qui ressemble à ceci:

var placeSearch, autocomplete; 
var componentForm = { 
    street_number: 'long_name', 
    route: 'long_name', 
    locality: 'long_name', 
    administrative_area_level_1: 'long_name', 
    country: 'long_name', 
    postal_code: 'long_name' 
    }; 

L'ensemble javascript + Html code ressemble à ceci:

<!DOCTYPE html> 
    <html> 
    <head> 
    <title>Place Autocomplete Address Form</title> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
    <meta charset="utf-8"> 
<style> 
    html, body, #map-canvas { 
    height: 100%; 
    margin: 0px; 
    padding: 0px 
    } 
</style> 
<link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500"> 
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true&libraries=places"></script> 
<script> 
    // This example displays an address form, using the autocomplete feature 
// of the Google Places API to help users fill in the information. 

var placeSearch, autocomplete; 
var componentForm = { 
street_number: 'long_name', 
    route: 'long_name', 
locality: 'long_name', 
administrative_area_level_1: 'long_name', 
country: 'long_name', 
    postal_code: 'long_name' 
}; 

function initialize() { 
    // Create the autocomplete object, restricting the search 
    // to geographical location types. 
    autocomplete = new google.maps.places.Autocomplete(
     /** @type {HTMLInputElement} */(document.getElementById('autocomplete')), 
     { types: ['geocode'],componentRestrictions: { country: 'ie' } }); 
    // When the user selects an address from the dropdown, 
    // populate the address fields in the form. 
    google.maps.event.addListener(autocomplete, 'place_changed', function() { 
    fillInAddress(); 
    }); 
} 

// [START region_fillform] 
function fillInAddress() { 

    // Get the place details from the autocomplete object. 
    var place = autocomplete.getPlace(); 

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

    // Get each component of the address from the place details 
    // and fill the corresponding field on the form. 

    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]]; 
     alert(val); 
     document.getElementById(addressType).value = val; 
    } 
    } 

} 
// [END region_fillform] 

// [START region_geolocation] 
// Bias the autocomplete object to the user's geographical location, 
// as supplied by the browser's 'navigator.geolocation' object. 

// [END region_geolocation] 
</script> 

<style> 
    #locationField, #controls { 
    position: relative; 
    width: 480px; 
    } 
    #autocomplete { 
    position: absolute; 
    top: 0px; 
    left: 0px; 
    width: 99%; 
    } 
    .label { 
    text-align: right; 
    font-weight: bold; 
    width: 100px; 
    color: #303030; 
    } 
    #address { 
    border: 1px solid #000090; 
    background-color: #f0f0ff; 
    width: 480px; 
    padding-right: 2px; 
    } 
    #address td { 
    font-size: 10pt; 
    } 
    .field { 
    width: 99%; 
    } 
    .slimField { 
    width: 80px; 
    } 
    .wideField { 
    width: 200px; 
    } 
    #locationField { 
    height: 20px; 
    margin-bottom: 2px; 
    } 
</style> 


</head> 

    <body onload="initialize()"> 
    <div id="locationField"> 
     <input id="autocomplete" placeholder="Enter your address" 
      onFocus="geolocate()" type="text"></input> 
    </div> 

<table id="address"> 
    <tr> 
    <td class="label">Street address</td> 
    <td class="slimField"><input class="field" id="street_number" 
      disabled="true"></input></td> 
    <td class="wideField" colspan="2"><input class="field" id="route" 
      disabled="true"></input></td> 
    </tr> 
    <tr> 
    <td class="label">City</td> 
    <td class="wideField" colspan="3"><input class="field" id="locality" 
      disabled="true"></input></td> 
    </tr> 
    <tr> 
    <td class="label">State</td> 
    <td class="slimField"><input class="field" 
      id="administrative_area_level_1" disabled="true"></input></td> 
    <td class="label">Zip code</td> 
    <td class="wideField"><input class="field" id="postal_code" 
      disabled="true"></input></td> 
    </tr> 
    <tr> 
    <td class="label">Country</td> 
    <td class="wideField" colspan="3"><input class="field" 
      id="country" disabled="true"></input></td> 
    </tr> 
</table> 

Can Quelqu'un m'aider à obtenir l'adresse complète en utilisant '6 The Rise, Owenabue Heights, Carrigaline, Co. Cork, Irlande' à titre d'exemple?

Je veux aussi les hauteurs de owenabue de la partie ignorée.

Merci à l'avance

Répondre

1

Ceci est la boucle que vous utilisez pour écrire le contenu:

for (var i = 0; i < place.address_components.length; i++) { 
    var addressType = place.address_components[i].types[0]; 
    if (componentForm[addressType]) { //can't find component with id=sublocality_level_1 
     var val = place.address_components[i][componentForm[addressType]]; 
     document.getElementById(addressType).value = val; 
    } 
} 

Lorsque vous obtenez addressType dans votre boucle, votre logique écrit le contenu à votre componentForm, seulement si le composant est disponible. Il utilise la condition suivante: if (componentForm[addressType]). Cependant, le addressType pour Owenabue Heights est sublocality_level_1. Maintenant, vous n'avez aucune zone de texte dans votre page HTML avec cette id. Donc, vous devez créer un nouveau champ de contrôle/texte avec id="sublocality_level_1" afin que vous puissiez y écrire du contenu.

P.S: Vous pouvez ouvrir votre outil de débogage et rechercher le groupe d'objets place.address_components pour voir les informations.