2009-10-17 12 views
10

Ho un modulo con un numero variabile di campi di completamento automatico che utilizzano lo stesso elenco di selezione. Questi campi vengono aggiunti e rimossi secondo necessità. Ogni volta che un parametro sulla pagina viene modificato, I (provo a) aggiornare l'elenco di tutti i campi dalla prima chiamando unbind() poi autocomplete() con un nuovo parametro aggiunto alla URL.jQuery Autocomplete: come aggiornare la lista?

$('input.foo').unbind().autocomplete(url?new_param=bar); 

Il problema è che unbind() non sembra essere non vincolante. Quando digito il campo di input, spara l'intera cronologia degli eventi di completamento automatico.

Ho anche provato flushCache senza alcun risultato.

Come faccio a cancellare i vecchi eventi?

Grazie.

risposta

2

Il plugin di completamento automatico aggiunge una funzione chiamata unautocomplete() per rimuovere completamento automatico() dai campi che hanno, quindi dovrebbe funzionare se modificare il codice per:

$('input.foo').unautocomplete().autocomplete('url?new_param=bar'); 

Questo unautocomplete() funzione dovrebbe rimuovere tutti dei vecchi eventi.

+0

Ehi, grazie per aver risposto Deeksy. Ho provato non completa, ma non ha funzionato. L'ho fatto, comunque uso removeData ('eventi') e questo ha funzionato! $ ('input.foo'). RemoveData ('events'). Autocomplete ('url? New_param = bar'); Si noti che se si fa questo, tutti gli altri eventi collegati a quell'elemento avranno spazzato via. – cinematic

+1

@cinematic Sì, esaminando il codice del plugin di completamento automatico, è spiacevole che lo spazio dei nomi sia l'evento 'keydown', ma non il clic, il focus o altri eventi che vengono aggiunti all'input come parte del completamento automatico. Se si fossero presi la briga di seguire, sarebbe solo questione di andare .unbind ('keypress.autocomplete'). Unbind ('click.autocomplete'). ecc., ma dovrebbe essere tutto in uno non completo(), suppongo. – Deeksy

+0

Nice ... Grazie per la soluzione. – Cesar

3

Prova questa

$ ('input.foo').unbind('.autocomplete').autocomplete ('url?new_param=bar') ; 
0

Credo che il problema è che non si dispone di un modulo che racchiude il campo di inserimento automatico. Se si guarda nel codice di jquery.autocomplete.js esso fa $ (input.form) .unbind (". Autocomplete"); su unutocomplete(), che significa che l'input deve vivere all'interno di un tag del modulo per funzionare.

+0

$ (input.form) non verrà eseguito. $ ('Ingresso.form ') selezionerebbe i tag di input con il modulo di classe, come . Penso che quello che stai pensando sia $ ('form input'), che sarebbe un tag di input all'interno dei tag del modulo. In ogni caso, il codice che hai citato sopra non è presente in jquery.autocomplete.js - questa risposta non è applicabile. –

2

jQuery fornisce il metodo flushCache() (http://docs.jquery.com/Plugins/Autocomplete) per rimuovere i contenuti già associati tramite il completamento automatico.

Ad esempio, se l'elemento html utilizzato è <input type="text" id="txtElement"/> e completamento automatico è associato con esso. Il flushCache può essere dato come segue: $("#txtElement").flushCache(); e questo risolverebbe il problema.

+0

Peccato che sia così basso nell'elenco. Il tuo consiglio ha funzionato come un fascino. Votato. –

+0

+1. Il metodo flushCache funziona sui dati senza cancellare le impostazioni. –

1

Se si utilizza opzioni quindi aggiungere cacheLength e impostarlo su 1. Questa impostazione non memorizzare qualsiasi di record restituiti. Fidati di me, ha reso la mia vita migliore ... per tutti i 5 minuti.

+0

Giusto per essere chiari nella dichiarazione di cui sopra: Questa impostazione non memorizzerà alcuno dei record restituiti IN PRECEDENZA. (Siamo spiacenti!) Eseguirà un nuovo recupero dei record. – Edwin

5
$(target).autocomplete("destroy"); 
+1

Questa risposta è il modo attuale per farlo. –

+0

Non funziona per elementi DOM aggiunti dinamicamente. Questa risposta funziona: http://stackoverflow.com/a/6585109/304209 –

+0

c'è anche $ (target) .autocomplete ("disable"); vedere l'API – montrealmike

Problemi correlati