我有很多麻煩,使jQuery的自動填充小工具爲我工作。我正在使用來自服務器的鍵/值對列表。jQuery UI自動完成與混合文本/ ID搜索
我有以下要求:
如果用戶從窗口小部件選擇一個值,我想ID傳遞給服務器。
如果用戶沒有選擇一個值並輸入原始文本,或者修改了一個已經被選中的值,我想要清除ID字段,並且只是將原始文本發送到服務器。
假設someAjaxFunction
返回自動填充小部件期望的對象數組:{label:label, value:key}
。
起初我設置自動完成構件像這樣:
$(input).autocomplete({
source: sourceFunction,
minLength: 1
});
改變選擇,甚至通過將鼠標懸停在項目中的一個改變了$(輸入)參考下面的鍵文本框中的文本,而不是標籤。從用戶交互的角度來看,這是非常不可取的 - 事實上,我正在研究這個問題的原因是因爲我正在構建的站點的用戶一直對他們輸入的文本感到困惑,似乎它們變成了隨機數字!
我添加了一個隱藏字段下的文本框中並實施的select()和焦點()事件,以掩飾,像這樣的ID:
$(input).autocomplete({
source: sourceFunction,
minLength: 1
focus: function(event, ui) {
$(idField).val(ui.item.value);
$(this).val(ui.item.label);
return false;
},
select: function(event, ui) {
$(idField).val(ui.item.value);
$(this).val(ui.item.label);
return false;
},
minLength: 1
});
這種運作良好,當用戶被粘到由自動完成下拉菜單提供的腳本。該ID隱藏並正確提交給服務器。不幸的是,如果用戶想要在框中輸入一些自由格式的文本並根據該值進行搜索,則ID字段不會重置,並且之前選擇的ID將被提交給服務器。這也相當混亂。
jQuery UI自動完成文檔列出change
事件,並指出ui
參數的item
屬性將設置爲所選項目。我想我可以重置按鍵上隱藏的ID字段,並重新填充ID如果自動完成更改。不幸的是,除了按鍵事件捕獲了一大堆按鍵,不應該重置ID,事件中的事件(這是管理文本框中的文本所必需的)中的語句阻止change
事件具有UI .item正確分配。
所以現在我被卡住了 - 我真的不知道還有什麼我可以嘗試使小部件支持功能,它似乎應該默認支持。要麼這個過程比它本該更復雜,要麼我錯過了一些非常明顯的東西。我挑選了所有可用的事件和所有的例子,並且空手而歸。事實上,即使jQuery UI頁面上的「自定義數據和顯示」示例也會遇到這個問題。
我可以在服務器端添加一些黑客來掩蓋這一點,但我真的希望能夠在客戶端級別做到這一點。
我還希望堅持jQuery UI自動填充小部件,而不是切換到另一個。
對不起,我可以澄清一些事情嗎?至少有一個問題是,如果用戶輸入具有相應ID的值,或者如果用戶沒有對應的值時輸入的任何內容,則希望ID框填充* *相關的ID - 正確/不正確的? – Stephen 2010-07-27 13:49:39
那麼,如果文本框中的文本被設置爲與自動完成提供的選項不對應的內容,我只希望隱藏的ID字段爲空。 – Shabbyrobe 2010-07-27 14:27:37