2009-10-17 14 views
10

Ich habe ein Formular mit einer variablen Anzahl von Autocomplete-Feldern, die dieselbe Auswahlliste verwenden. Diese Felder werden nach Bedarf hinzugefügt und entfernt. Wenn ein Parameter auf der Seite geändert wird, aktualisiere ich (versuche) die Liste für alle Felder, indem ich zuerst unbind() und dann mit einem neuen Parameter anwecke, der zur URL hinzugefügt wurde.jQuery Autocomplete: Wie Liste aktualisieren?

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

Das Problem ist, dass unbind() scheint nicht zu trennen sein. Wenn ich das Eingabefeld eintippe, wird der gesamte Verlauf der Autocomplete-Ereignisse ausgelöst.

Ich versuchte auch FlushCache ohne Erfolg.

Wie lösche ich die alten Ereignisse?

Danke.

Antwort

2

Die Autocomplete-Plugin fügt eine Funktion unautocomplete() aufgerufen die automatische Vervollständigung() von den Feldern zu entfernen, die sie haben, so sollte es funktionieren, wenn Ihr Code ändern:

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

Diese unautocomplete() Funktion sollte alle entfernen der alten Ereignisse.

+0

Hey, danke für die Antwort Deeksy. Ich habe versucht, nichtautocomplete, aber es hat nicht funktioniert. Ich habe jedoch removeData ('events') verwendet und das hat funktioniert! $ ('input.foo'). RemoveData ('Ereignisse'). Autocomplete ('url? New_param = bar'); Beachten Sie, dass alle anderen Ereignisse, die an dieses Element angehängt sind, weggeblasen werden. – cinematic

+1

@cinematic Yeah, in den AutoComplete-Plugin-Code geschaut, ist es bedauerlich, dass sie das "Keydown" -Ereignis, aber nicht den Klick, den Fokus oder andere Ereignisse, die der Eingabe als Teil der Autocomplete hinzugefügt werden. Wenn sie sich die Mühe gemacht hätten, durchzukommen, würde es nur darum gehen, .unbind ('keypress.autocomplete'). Unbind ('click.autocomplete'). usw. obwohl das alles in der unautocomplete sein sollte() nehme ich an. – Deeksy

+0

Schön ... Danke für die Lösung. – Cesar

3

Versuchen Sie, diese

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

Ich denke, Ihr Problem ist, dass Sie nicht über eine Form haben, die zur automatischen Vervollständigung Eingabefeld umschließt. Wenn Sie in den Code von jquery.autocomplete.js schauen, tut es $ (input.form) .unbind (". Autocomplete"); auf unautocomplete(), was bedeutet, dass die Eingabe innerhalb eines Formular-Tags leben muss, um zu funktionieren.

+0

$ (input.form) würde nicht ausgeführt. $ ('Eingabe.form ') würde Eingabe-Tags mit Klassenform wie auswählen. Ich denke, was Sie denken, ist $ ('Formulareingabe'), die Eingabe-Tags innerhalb von Formular-Tags wären. In jedem Fall ist der oben erwähnte Code in jquery.autocomplete.js nicht vorhanden - diese Antwort ist nicht anwendbar. –

2

jQuery bietet die Methode flushCache() (http://docs.jquery.com/Plugins/Autocomplete), um den Inhalt zu entfernen, der bereits durch die automatische Vervollständigung gefunden wurde.

Zum Beispiel, wenn das verwendete HTML-Element ist <input type="text" id="txtElement"/> und Auto-Vervollständigung ist damit verbunden. Der flushCache kann wie folgt angegeben werden: $("#txtElement").flushCache(); und dies würde das Problem lösen.

+0

Schade, das ist so niedrig in der Liste. Ihr Tipp funktionierte wie ein Zauber. Abgestimmt. –

+0

+1. Die Methode "flushCache" arbeitet mit Daten, ohne die Einstellungen zu löschen. –

1

Wenn Sie Optionen verwenden, fügen Sie cacheLength hinzu und legen Sie sie auf 1 fest. Mit dieser Einstellung werden keine zurückgegebenen Datensätze gespeichert. Vertrauen Sie mir, es hat mein Leben besser gemacht ... für alle 5 Minuten.

+0

Nur um in der obigen Aussage klar zu sein: Diese Einstellung speichert keine der zuvor zurückgegebenen Datensätze. (Entschuldigung!) Es wird einen neuen Abruf von Datensätzen durchführen. – Edwin

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

Diese Antwort ist der aktuelle Weg, es zu tun. –

+0

Es funktioniert nicht für dynamisch hinzugefügte DOM-Elemente. Diese Antwort funktioniert: http://Stackoverflow.com/a/6585109/304209 –

+0

gibt es auch $ (target) .autocomplete ("disable"); Sehen Sie sich die API – montrealmike