2009-05-12 52 views
6

Ho una pagina con due campi di input Città e Sede. Ho il plugin di completamento automatico da Devbridge che funziona perfettamente per il campo della città. Ora voglio farlo funzionare sul campo del luogo. Il javascript che ho finora è:Richieste concatenate con completamento automatico jquery

<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> 

Il secondo completamento automatico passa un Parametro aggiuntivo (città) per l'azione sul mio controller. Lo userò per limitare le mie risposte alle sedi in quella città. Questo parametro viene ricevuto ma non contiene il valore corrente inserito in #Event_City. Invece contiene il valore predefinito.

Qualcuno sa come valutare il valore quando viene chiamato il completamento automatico?

Sono appena iniziato con Javascript quindi per favore sii gentile.

Grazie,

+0

stavo per chiedere la stessa cosa. Stavo cercando di passare il parametro 'normalmente', ma suppongo che il campo non venga aggiornato senza utilizzare l'evento onchange. –

risposta

7

@Ian Mckay - Al fine di ottenere il completamento automatico per la Venue per filtrare in base alla città, è necessario per legare alla manifestazione "cambiamento" del Città come segue:

$(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

Sei sicuro che questo non vincerà il plug-in automatico alla casella di testo più di una volta? Questo potrebbe essere cattivo. Ad esempio, se cambi il valore della prima casella di testo, diciamo 20 volte, la seconda casella di testo sarà autosuggestata 20 volte (e quindi effettuerai 20 chiamate asincrone ajax al back-end in una sola volta)? o_0 – KyleFarris

+0

@Kyle - Credo, tu abbia ragione. Questo succederebbe se l'utente decidesse di tornare indietro e cambiare città. Il plugin jQuery con completamento automatico standard ha un'opzione "destroy" che può essere passata, ma questa non è così. –

3

Il motivo che contiene il valore di default è perché il completamento automatico è attaccato alla casella di testo quando la pagina viene caricata. Per essere aggiornato con il nuovo valore, il plugin dovrebbe fornire un modo per aggiornare le proprietà del suo oggetto parametro o consentire di distruggerlo sul secondo elemento e quindi ricostruirlo ogni volta che l'utente cambia il primo il valore di uno. La libreria AutoComplete che hai scelto sembra piuttosto leggera (non è sempre una brutta cosa ... solo nel tuo caso è ...) e non sembra supportare questa funzionalità.

Il mio miglior suggerimento per voi sarebbe provare un'altra libreria. Io tendo a come questo uno molto come è abbastanza versatile (pagina di configurazione):

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

+0

Viene visualizzato un ottimo punto +1 – ichiban

Problemi correlati