0

Ich habe ein Formular, das ein Textfeld enthält, das mit der Google Places API verbunden ist. Was ich möchte ist, dass, wenn eine erkannte Adresse eingegeben wird, ich auch die lat/long-Position des eingegebenen Ortes und bash die Werte in andere Formularfelder, so dass sie auf dem Backend ohne einen anderen API-Aufruf gespeichert werden können. Der folgende Code für die Initialisierung, zusammen mit ein paar Debug-Protokolle, funktioniert gut für diese (Entschuldigung für die dummen Feld-IDs, ich schuld Drupal ...)Wie kann festgestellt werden, wenn ein Nutzer einen ungültigen Ort in ein Google Places-Feld eingibt?

function placesInitialize() { 
     var input = document.getElementById('edit-field-google-location-und-0-value'); 
     var autocomplete = new google.maps.places.Autocomplete(input); 

     google.maps.event.addListener(autocomplete, 'place_changed', function() { 
      var geocoder = new google.maps.Geocoder(); 
      var address = document.getElementById('edit-field-google-location-und-0-value').value; 

      geocoder.geocode({ 'address': address }, function (results, status) { 
       console.log('inside geocoder.geocode'); 
       if (status == google.maps.GeocoderStatus.OK) { 
        var latitude = results[0].geometry.location.lat(); 
        var longitude = results[0].geometry.location.lng(); 
        console.log('lat and long = ' + latitude + ' and ' + longitude); 
        $('#edit-field-location-latitude-und-0-value').val(latitude); 
        $('#edit-field-location-longitude-und-0-value').val(longitude); 
       } 
       else { 
        console.log('GeocoderStatus not ok:'); 
        console.log(google.maps.GeocoderStatus); 
       } 
      }); 
     }); 
    } 
    google.maps.event.addDomListener(window, 'load', placesInitialize); 

Nun, wenn der Benutzer etwas eingibt, der nicht erkannt wird von Places möchte ich die Lat und Long Felder löschen. Das ist mein Problem: Wie erkenne ich, dass dies passiert ist? Ich hatte gedacht, dass dies von google.maps.GeocoderStatus signalisiert worden wäre nicht in Ordnung, aber diese Protokolle nie feuern. Tatsächlich wird die Nachricht "inside geocoder.geocode" in dieser Situation auch nicht angezeigt.

Ich habe gesucht, aber noch kein Ereignis gefunden, das google.maps in dieser Situation werfen könnte. Ich könnte etwas aus dem blur Ereignis des Eingabefeldes hängen, aber ich bin nicht sicher, was es tun würde (es würde Sachen im Eingabefeld geben, nur nicht gültige Sachen). Ich habe über einen Semaphor nachgedacht, der verfolgt, ob der Geocoder aufgerufen wurde, aber ich müsste trotzdem den Status "ungültiger Eintrag" erkennen, um den Fall zu erfassen, in dem der Benutzer zuerst etwas Gültiges eingibt und dann durch etwas ungültiges ersetzt.

Wie auch immer: Irgendwelche Gedanken da draußen? Vielen Dank!

+1

Wirklich? Eine Drive-by-Down-Abstimmung? Wenn etwas mit diesem Beitrag nicht stimmt, würde mich jemand ansprechen? Weil ich es wirklich nicht sehe ... –

Antwort

0

place_change wird nur ausgelöst, wenn ein Benutzer einen der Vorschläge im Dropdown-Menü auswählt. Wenn die Ortsbibliothek keine Vorschläge zurückgibt, passiert nichts.

Da die Autocomplete keinen Zugriff auf die Vorschläge bietet (es sei denn, Sie wählen eine aus), können Sie die Vorschläge über die Autocomplete-Service anfordern (dann können Sie überprüfen, ob es Vorschläge gibt).

Die automatische Vervollständigung-Funktionalität Sie können dann auf eigene Faust umzusetzen, basierend auf den zurück Vorschläge (z. Über jQueryUI)

Verwandte Themen