2009-05-12 13 views
6

Tengo una página con dos campos de entrada Ciudad y Lugar. Tengo el complemento de autocompletar de Devbridge que funciona muy bien para el campo de la ciudad. Ahora quiero que funcione en el campo de la sede. El javascript que tengo hasta ahora es:Jquery Autocompletar Solicitudes encadenadas

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#Event_City').autocomplete({ 
      serviceUrl: '<%=Url.Action("GetCities", "Search") %>', 
      minChars:2, 
      width: 300, 
      delimiter: /(,|;)\s*/, 
      deferRequestBy: 150, //miliseconds 
      params: { country: 'Yes' }, 
     }); 
     $('#Event_Venue').autocomplete({ 
      serviceUrl: '<%=Url.Action("GetVenues", "Search") %>', 
      minChars:2, 
      width: 300, 
      delimiter: /(,|;)\s*/, 
      deferRequestBy: 150, //miliseconds 
      params: { city: $("#Event_City").val() }, 
     }); 
    });  
</script> 

El segundo autocompletar pasa un parametro adicional (ciudad) a la acción de mi controlador. Luego usaré esto para restringir mis respuestas a los lugares en esa ciudad. Este parámetro se recibió pero no contiene el valor actual ingresado en #Event_City. En cambio, contiene el valor predeterminado.

¿Alguien sabe cómo evaluar el valor cuando se llama al autocompletar?

Estoy empezando con Javascript, así que sea amable.

Gracias,

+0

estaba a punto de hacer la misma cosa. Estaba intentando pasar el parámetro 'normalmente', pero supongo que el campo no se actualiza sin usar el evento onchange. –

Respuesta

7

@Ian Mckay - Con el fin de obtener el Autocompletar para la Lugar a filtrar en función de la ciudad, es necesario para unirse en el evento "cambio" de la Ciudad de la siguiente manera:

$(document).ready(function() { 
    $('#Event_City').autocomplete({ 
     serviceUrl: '', 
     minChars:2, 
     width: 300, 
     delimiter: /(,|;)\s*/, 
     deferRequestBy: 150, //miliseconds 
     params: { country: 'Yes' }, 
    }).change(function(){ 
     $('#Event_Venue').autocomplete({ 
      serviceUrl: '', 
      minChars:2, 
      width: 300, 
      delimiter: /(,|;)\s*/, 
      deferRequestBy: 150, //miliseconds 
      params: { city: $("#Event_City").val() } 
     }); 
    }); 
}); 
+0

¿Está seguro de que esto no va a vincular el complemento de autocompletar al cuadro de texto más de una vez? Esto podría ser malo. Al igual que, si cambia el valor del primer cuadro de texto, digamos 20 veces, ¿el segundo cuadro de texto se autosolicitará 20 veces (y, por lo tanto, realizará 20 llamadas ajax asíncronas al backend a la vez)? o_0 – KyleFarris

+0

@Kyle - Creo que tienes razón. Esto sucedería si el usuario decide regresar y cambiar la ciudad. El plugin jQuery autocompletado estándar tiene una opción "destruir" que podría pasarse, pero esta no. –

3

La razón de que contiene el valor por defecto es debido a que la función de autocompletar está unido a la caja de texto cuando se carga la página. Para que se actualice con el nuevo valor, el complemento necesitaría proporcionar una forma de actualizar las propiedades de su objeto de parámetro o permitirle destruirlo en el segundo elemento y luego reconstruirlo cada vez que el usuario cambie el primero el valor de uno La biblioteca de Autocompletar que elija parece bastante liviana (no siempre es algo malo ... solo en su caso, es ...) y no parece ser compatible con esta funcionalidad.

Mi mejor sugerencia para usted sería probar con otra biblioteca. Me suelen gustar éste mucho ya que es bastante versátil (página de demostración):

http://view.jquery.com/trunk/plugins/autocomplete/demo/

+0

Aparecerá un muy buen punto +1 – ichiban