2017-08-31 3 views
0

Arbeit mit der Google-Orte API zu bekommen und kann nicht verstehen, warum Autocomplete undefined hier auf Abruf zurückgibt, um Plätze zu erhalten. was Entwickler-Tools zeigt ist. address_components ist, was auf einen Anruf zurückgegeben werden sollte leider nicht möglich, autocomplete.getPlace Eigenschaft ‚address_components‘ undefinierter oder NULL-VerweisOrte api Nicht möglich Eigenschaft 'address_components' von undefined oder null Referenz

function initAutoCompleteDynamic() { 
var slideID = 99; 
var idx = 99 - slideID; 
var propcount = 5; 

    for (var i = 0; i < propcount; i++) { 
    var propaddress = "prop1address" + i; 
    var autocomplete = autocomplete + i; 
    autocomplete = new google.maps.places.Autocomplete(
     document.getElementById(propaddress)), 
     { types: ['geocode'] }; 
     autocomplete.addListener('place_changed', fillinAddressDynamic); 


    } 
} 

und in fillinAddressDynamic

 var place=autocomplete.getPlace(): 
     for (var i = 0; i < place.address_components.length; i++) { 
    alert("i am in the loop"); 
    var addressType = place.address_components[i].types[0]; 
    var field = addressType; 
    var completeaddress1 = ''; 
    var propaddress = 'prop1address' + i; 
    var strnum = 'streetnumber' + i; 
    CR(i);//calling component resolver. 


    if (componentFormProduction[addressType]) { 
     var val = place.address_components[i][componentFormProduction[addressType]]; 
     document.getElementById(CR[addressType]).value = val; 

     if (field == "street_number") { 
      var streetnum = document.getElementById(strnum).value = val; 

     } 
     if (field == "route") { 
      if (streetnum) { 
       completeaddress1 = streetnum + ' ' + val; 
      } 
      else { 
       completeaddress1 = val; 
      } 
      document.getElementById('prop1address0').value = completeaddress1; 
     } 
    } 

} 

Antwort

0

Dies, wenn der Benutzer würde passieren, bekommen (oder Sie) drücken Enter, ohne auf einen Vorschlag zu klicken.

Typischerweise ist die Reihenfolge der Veranstaltung wie folgt aus:

  1. Benutzer gibt Eingabe
  2. JavaScript fragt die automatische Vervollständigung für Anregungen
  3. Benutzer klickt auf einen Vorschlag
  4. JavaScript-Details abfragt, ersetzt Benutzereingabe mit Details Antwortfelder (inkl. address_components) und feuern das places_changed Ereignis
  5. Handler für places_changed den Platz Objekt von Details zur Antwort erhalten, indem getPlace()

jedoch fordern, kann es auch so aussehen:

  1. Benutzer gibt Eingabe
  2. JavaScript fragt die automatische Vervollständigung für Anregungen
  3. Benutzer ignoriert Vorschläge und Treffer Enter ohne einen zu klicken
  4. JavaScript löst das Ereignis places_changed ohne qu Details oder Benutzereingabe ändern
  5. Handler für places_changed Aufrufe getPlace() und erhält ein fast leerer Place-Objekt, mit nur dem name Feld, das die rohe Benutzereingabe enthält.

Es ist für Sie zu entscheiden, was mit roher Benutzereingabe zu tun, hier sind einige Beispiele:

Dieses Tool des JavaScript-Geocoding Service für diesen Eingang zur Suche verwendet: https://google-developers.appspot.com/maps/documentation/utils/geocoder/

Dieses Beispiel (Adressformular) tut nichts mit ihm: https://google-developers.appspot.com/maps/documentation/javascript/examples/places-autocomplete-addressform

Das (sehr einfach) Beispiel zeigt eine Fehlermeldung keine Details berichten: https://google-developers.appspot.com/maps/documentation/javascript/examples/full/places-autocomplete

+0

Nein es ist nicht wegen der Auswahl einer Adresse, ich glaube, es liegt an der asynchronen Natur des Aufrufs, das ist dynamisch geladene Daten von Google API, ich denke, die Lösung wäre, ein benutzerdefiniertes verzögertes Objekt zu verwenden, Es scheint ein Zeitfehler zu sein, manchmal funktioniert es manchmal, wenn es nicht verzögert wird, sollte es behoben werden/es lange genug warten lassen, um es abzuschließen. – webdev8183

Verwandte Themen