2012-05-27 14 views
6

Esta pregunta se relaciona con la respuesta a esta pregunta: Google maps Places API V3 autocomplete - select first option on enter. Básicamente, es hacer que el campo use la primera sugerencia de la lista de autocompletar cuando el usuario presiona enter. La respuesta a esa pregunta tiene un jsfiddle - http://jsfiddle.net/dodger/pbbhH/ - que funciona, excepto cuando el campo de texto pierde el foco, el valor del campo retorna al valor parcialmente ingresado.Google maps Lugares API V3 autocompletar: seleccione la primera opción al entrar (y que permanezca así)

Por ejemplo, un usuario hace clic en el campo de entrada y escribe 'buey', el cuadro de autocompletar aparece con algunas sugerencias, y el usuario presiona enter. El mapa se cambia para mostrar la ubicación del primer elemento del cuadro de autocompletar (con un marcador), y el valor del campo de entrada se cambia al primer elemento del cuadro de autocompletar. El usuario hace clic en algún lugar fuera del campo y el valor del campo de entrada vuelve a 'buey'.

Me gustaría que el valor del campo de entrada permanezca como la primera sugerencia de autocompletar.

Respuesta

10

Prueba esto: http://jsfiddle.net/pbbhH/60/

Básicamente abstrae la lógica de selección a una nueva función selectFirstResult(). Luego llamó a esta función tanto al presionar enter como al perder el foco en el texto.

function selectFirstResult() { 
    infowindow.close(); 
    var firstResult = $(".pac-container .pac-item:first").text(); 

    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({"address":firstResult }, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      var lat = results[0].geometry.location.lat(), 
       lng = results[0].geometry.location.lng(), 
       placeName = results[0].address_components[0].long_name, 
       latlng = new google.maps.LatLng(lat, lng); 

      moveMarker(placeName, latlng); 
      $("input").val(firstResult); 
     } 
    }); 
} 

EDIT: hicieron cambios menores por @ comentario de Ben continuación.

+0

Oh! Casi lo tengo. Así que ahora el problema es que selecciona la primera sugerencia en la lista de autocompletar si escriben un par de letras y luego hacen clic fuera del campo de entrada. Me gustaría, así que o bien tienen que: seleccionar de la lista de autocompletar usando su mouse, o presionar enter para elegir la primera opción. – Ben

+0

Me alegra saber que @Mubix te ayudó a seguir adelante. Toma la muy buena respuesta que Mubix te dio, prueba algunas cosas para hacer los cambios que necesitas, y si eso no funciona, sigue tratando de resolverlo por ti mismo. Mientras hace ese trabajo, puede decidir regresar y agregar a su respuesta, pero puede que no lo haga. Si te encuentras con más problemas y te atascas mientras trabajas, vuelve y pide ayuda. Pero no es justo lanzar más preguntas a Mubix y esperar que él las responda antes de que aceptes su respuesta. –

+0

Estoy confundido. Si bien la respuesta de Mubix cambió técnicamente el valor del campo como se deseaba, también introdujo un comportamiento adicional que no puedo imaginar que alguien quiera. ¿No sería lo mejor para el depósito de información de Stackoverflow si esperé hasta que se nos ocurrió una solución que funciona completamente antes de marcar la pregunta como respondida? – Ben

1

Esto es correcto, pero si presiona enter y ya ha seleccionado un elemento, esto seleccionará el primero. Utilice este código:

function selectFirstResult() { 
infowindow.close(); 
if ($('.pac-selected').lenght < 0){ // this line 

var firstResult = $(".pac-container .pac-item:first").text(); 
var geocoder = new google.maps.Geocoder(); 
geocoder.geocode({"address":firstResult }, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     var lat = results[0].geometry.location.lat(), 
      lng = results[0].geometry.location.lng(), 
      placeName = results[0].address_components[0].long_name, 
      latlng = new google.maps.LatLng(lat, lng); 

     moveMarker(placeName, latlng); 
     $("input").val(firstResult); 
    } 
}); 
} 
} 
+0

no es it 'if ($ ('. pac-selected'). lenght <= 0) {'? – Kroenig

Cuestiones relacionadas