2009-10-17 27 views
10

Tengo un formulario con una cantidad variable de campos de autocompletar que usan la misma lista de selección. Estos campos se agregan y eliminan según sea necesario. Cada vez que se cambia un parámetro en la página, intento actualizar la lista para todos los campos llamando al unbind() y luego al autocomplete() con un nuevo parámetro agregado a la url.jQuery Autocompletar: ¿cómo actualizar la lista?

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

El problema es que desvincular() no parece desvincularse. Cuando escribo en el campo de entrada, desaparece todo el historial de eventos de autocompletar.

También probé flushCache en vano.

¿Cómo se borran los antiguos eventos?

Gracias.

Respuesta

2

El plugin autocompletar añade una función llamada unautocomplete() para eliminar autocompletar() de los campos que lo tienen, así que debería funcionar si cambiar el código para:

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

Este unautocomplete() debería eliminar todo de los viejos eventos

+0

Hola, gracias por responder Deeksy. Probé una autocompleta, pero no funcionó. Lo hice, sin embargo uso removeData ('events') ¡y funcionó! $ ('input.foo') REMOVEDATA ('eventos') autocompletar ('url = new_param bar?')..; Tenga en cuenta que si lo hace, cualquier otro evento asociado a ese elemento se desvanecerá. – cinematic

+1

@cinematic Sí, mirando en el código de autocompletar plugin, lo lamentable es que el evento de espacio de nombres 'keyDown', pero no el clic, el enfoque u otros eventos que se agregan a la entrada como parte de la función de autocompletar. Si se hubieran molestado en llevarlo a cabo, simplemente sería cuestión de ir .unbind ('keypress.autocomplete'). Unbind ('click.autocomplete'). etc. aunque eso debería ser todo en unautocomplete(), supongo. – Deeksy

+0

Agradable ... Gracias por la solución. – Cesar

3

probar este

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

Creo que su problema es que usted no tiene una forma que encierra el campo de entrada de autocompletar. Si observa el código de jquery.autocomplete.js, hace $ (input.form) .unbind (". Autocomplete"); en unautocomplete(), lo que significa que la entrada debe vivir dentro de una etiqueta de formulario para poder funcionar.

+0

$ (input.form) no se ejecutará. $ ('entrada.form ') seleccionaría las etiquetas de entrada con la forma de clase, como . Creo que lo que estás pensando es $ ('entrada de formulario'), que serían etiquetas de entrada dentro de las etiquetas de formulario. En cualquier caso, el código que mencionas arriba no está presente en jquery.autocomplete.js - esta respuesta no es aplicable. –

2

jQuery proporciona el método flushCache() (http://docs.jquery.com/Plugins/Autocomplete) para eliminar los contenidos ya apareados mediante el autocompletado.

Por ejemplo, si el elemento html utilizado es <input type="text" id="txtElement"/> y de autocompletar se asocia con él. El flushCache se puede administrar de la siguiente manera: $("#txtElement").flushCache(); y esto resolvería el problema.

+0

Lástima que este es tan bajo en la lista. Tu consejo funcionó como un amuleto. Votado arriba. –

+0

+1. El método flushCache funciona con datos sin borrar la configuración. –

1

Si está utilizando las opciones a continuación, añadir cacheLength y ponerlo a 1. Este ajuste no va a almacenar cualquiera de los registros devueltos. Créeme, me ha hecho la vida mejor ... durante los 5 minutos.

+0

Para que quede claro en la declaración anterior: Esta configuración no almacenará ninguno de los registros devueltos ANTERIORMENTE. (¡Lo siento!) Realizará una nueva recuperación de registros. – Edwin

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

Esta es la forma actual de hacerlo. –

+0

No funciona para elementos DOM añadidos dinámicamente. Esta respuesta funciona: http://stackoverflow.com/a/6585109/304209 –

+0

también hay $ (destino) .autocompletar ("deshabilitar"); ver la api – montrealmike

Cuestiones relacionadas