2009-10-17 16 views
10

Mam formularz ze zmienną liczbą pól autouzupełniania, które korzystają z tej samej listy wyboru. Te pola są dodawane i usuwane w razie potrzeby. Ilekroć parametr na stronie jest zmieniany, ja (próbuję) zaktualizować listę dla wszystkich pól, najpierw wywołując unbind(), a następnie autocomplete() z nowym parametrem dodanym do adresu URL.Autouzupełnianie jQuery: jak odświeżyć listę?

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

Problem polega na tym, że polecenie unbind() nie wydaje się rozłączać. Kiedy wpisuję pole wejściowe, odpala całą historię zdarzeń autouzupełniania.

Próbowałem również flushCache bezskutecznie.

Jak usunąć stare zdarzenia?

Dzięki.

Odpowiedz

2

Wtyczka autouzupełniania dodaje funkcję o nazwie unautocomplete(), aby usunąć autouzupełnianie() z dziedzin, które mają go, więc powinien działać, jeśli zmiany kodu do:

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

Ten unautocomplete() funkcja powinna usunąć wszystkie ze starych wydarzeń.

+0

Hej, dzięki za odpowiedź Deeksy. Próbowałem nieukierunkować, ale to nie zadziałało. Zrobiłem, jednak użyłem removeData ("events") i to działało! $ ('input.foo'). RemoveData ('events'). Autocomplete ('url? New_param = bar'); Pamiętaj, że jeśli to zrobisz, wszelkie inne zdarzenia związane z tym elementem zostaną zerwane. – cinematic

+1

@cinematic Tak, patrząc na kod wtyczki autouzupełniania, niefortunne jest, że nazywają miejsce zdarzenia "keydown", ale nie kliknięcie, fokus lub inne zdarzenia dodane do wejścia jako część autouzupełniania. Jeśli by się tym zajmowali, byłoby to po prostu przejściem .unbind ("keypress.autocomplete"). Unbind ("click.autocomplete"). itp. chociaż to wszystko powinno być w nieukierunkowanym(), jak sądzę. – Deeksy

+0

Nice ... Dziękujemy za rozwiązanie. – Cesar

3

Spróbuj

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

Myślę, że problemem jest to, że nie mają formę otaczającą pole wprowadzania autouzupełniania. Jeśli zajrzysz do kodu jquery.autocomplete.js, to wykona $ (input.form) .unbind (". Autouzupełnianie"); on unautocomplete(), co oznacza, że ​​dane wejściowe muszą znajdować się wewnątrz znacznika formularza, aby działały.

+0

$ (input.form) nie działał. $ ('input.formularz ") wybrałby znaczniki wejściowe z formularzem klasy, np. . Myślę, że myślisz o $ ("input input"), który byłby tagami wejściowymi wewnątrz tagów formularzy. W każdym razie kod, o którym wspomniałeś powyżej, nie występuje w jquery.autocomplete.js - ta odpowiedź nie ma zastosowania. –

2

jQuery dostarcza metodę flushCache() (http://docs.jquery.com/Plugins/Autocomplete), aby usunąć zawartość już dopasowaną przez autouzupełnianie.

Na przykład, jeśli użyty element html to <input type="text" id="txtElement"/>, a autouzupełnianie jest z nim powiązane. FlushCache można podać w następujący sposób: $("#txtElement").flushCache(); i to rozwiązałoby problem.

+0

Szkoda, że ​​jest tak nisko na liście. Twoja wskazówka zadziałała jak urok. Zagłosowałem w górę. –

+0

+1. Metoda flushCache działa na danych bez usuwania ustawień. –

1

Jeśli używasz opcji, dodaj cacheLength i ustaw ją na 1. To ustawienie nie będzie przechowywać żadnych zwróconych rekordów. Zaufaj mi, dzięki temu moje życie stało się lepsze ... przez całe 5 minut.

+0

Dla jasności powyższego stwierdzenia: To ustawienie nie przechowuje żadnego z WCZEŚNIEJ zwróconych rekordów. (Przepraszam!) Wykona nowe pobieranie rekordów. – Edwin

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

Ta odpowiedź jest obecną metodą. –

+0

Nie działa dla dynamicznie dodawanych elementów DOM. Ta odpowiedź działa: http://stackoverflow.com/a/6585109/304209 –

+0

jest również $ (cel) .autocomplete ("wyłącz"); zobacz api – montrealmike

Powiązane problemy