2009-10-17 62 views
10

我有一個可變數量的使用相同選擇列表的自動填充字段的表單。根據需要添加和刪除這些字段。每當頁面上的參數發生變化時,我都會嘗試更新所有字段的列表,首先調用unbind(),然後autocomplete(),並將新參數添加到url中。jQuery自動完成:如何刷新列表?

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

問題是,unbind()似乎沒有解除綁定。當我輸入輸入字段時,它會觸發自動完成事件的整個歷史記錄。

我也試過flushCache無濟於事。

如何清除舊事件?

謝謝。

回答

2

的自動完成插件添加了一個名爲unautocomplete()從有它的字段刪除自動完成()函數,因此,如果您的代碼更改應該工作:

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

這unautocomplete()函數應該刪除所有的舊事件。

+0

嘿,謝謝你回覆Deeksy。我嘗試了不完整,但沒有奏效。我做了,但使用removeData('事件'),並工作! $('input.foo')。removeData('events')。autocomplete('url?new_param = bar'); 請注意,如果你這樣做,附加到該元素的任何其他事件將被吹走。 – cinematic 2009-10-19 04:17:03

+1

@cinematic是的,看着自動完成插件代碼,不幸的是他們命名空間的'keydown'事件,但不是點擊,焦點或其他事件添加到輸入作爲自動完成的一部分。如果他們打算繼續完成,這只是去.unbind('keypress.autocomplete')。unbind('click.autocomplete')的問題。等等,雖然這應該都在不完整的()我想。 – Deeksy 2009-10-19 06:56:25

+0

不錯...謝謝你的解決方案。 – Cesar 2009-10-29 18:47:58

3

試試這個

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

我覺得你的問題是,你沒有封閉自動完成輸入字段的形式。如果您查看jquery.autocomplete.js的代碼,它會執行$(input.form).unbind(「。autocomplete」); on unautocomplete(),這意味着輸入必須存在於表單標籤內才能工作。

+0

$(input.form)不會運行。 $('輸入。表單')將選擇具有類形式的輸入標籤,如。我想你在想什麼是$('表單輸入'),這將是表單標籤內的輸入標籤。無論如何,上面提到的代碼在jquery.autocomplete.js中不存在 - 此答案不適用。 – 2011-04-12 08:10:10

2

jQuery提供的flushCache()方法(http://docs.jquery.com/Plugins/Autocomplete)通過自動完成刪除已經匹配的內容。

例如,如果使用的html元素是<input type="text" id="txtElement"/>並且自動完成與它關聯。 flushCache可以給出如下:$("#txtElement").flushCache();這將解決這個問題。

+0

太糟糕了,這是如此低的名單。你的提示像一個魅力工作。投了票。 – 2011-06-22 03:51:35

+0

+1。 flushCache方法在不清除設置的情況下對數據起作用。 – 2012-11-20 10:32:56

1

如果您正在使用選項,請添加cacheLength並將其設置爲1.此設置不會存儲任何返回的記錄。相信我,這讓我的生活變得更加美好......整整5分鐘。

+0

只需在上述語句中清楚:此設置不會存儲以前返回的任何記錄。 (對不起!)它將執行新的記錄檢索。 – Edwin 2010-11-09 16:23:46

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

這個答案是目前的做法。 – 2012-06-17 22:48:00

+0

它不適用於動態添加的DOM元素。這個答案的工作原理:http://stackoverflow.com/a/6585109/304209 – 2012-11-22 12:38:58

+0

還有$(target).autocomplete(「disable」);請參閱api – montrealmike 2013-02-25 21:12:39