首先,讓我先說我thatI知道其他類似的問題,像這樣的從這裏開始:如何實現jQuery UI自動完成'自動填充'和/或'selectFirst'功能?
How to implement "mustMatch" and "selectFirst" in jQuery UI Autocomplete?
,但它並不真正做什麼,我期望的那樣。我會解釋下面的原因。 我也知道張貼插件的原始開發商這個簡單的指南:
http://www.learningjquery.com/2010/06/autocomplete-migration-guide
,我也做了前者插件和UI插件的幾個還算用戶定製執行的許多實現。
話雖如此,這是我的問題,爲什麼第一個解決方案不適合我。 soruce來自JSON對象形式的數據庫。我使用自定義功能設置選項,見下圖:
source: function (request, response) {
var sourceData = $.parseJSON(result); //result is an array coming in via ajax
response($.map(sourceData, function (item) {
return { label: item.PortName, value: item.PortName, source: item };
//item has about 12 properties that could be used for other forms.
}))
}
然後我也有一個自定義change()
事件抓起source
以上,並做了幾件事情像店項目本身的的data()
對象元素,並解析item
對象中的某些數據以用於其他表單域等。
上述解決方案僅設置輸入值到第一個自動填充選項,但不會複製select
或change
自動完成的事件。所以實際上並不是真正的selectFirst
或autoFill
複製品。
的change
功能如下:
change: function (event, ui) {
if (ui.item) {
$('input:[name="another_form_field"]').val(ui.item.source.PortId);
}
else {
$(this).val('');
$('input:[name="release_port_id"]').val('');
}
}
這是一種快速,簡單,實施mustMatch功能的現在。一旦我實現了這兩個功能,這很可能會改變。
好吧,說了這麼多,有關如何實現這些功能的任何一個或兩個的任何建議?我曾嘗試附上上述問題中建議的blur
事件,但那不會起作用。
在此先感謝。
編輯: 這是我到目前爲止嘗試過的。將blur
事件綁定到自動完成元素。註釋行使用下拉列表中第一個元素的值並設置輸入的文本。這將工作,如果這就是我所需要的,但我需要複製選擇事件,這意味着我需要更多的數據(不僅僅是文本)。
.live('blur', function (e) {
if ($('.ui-autocomplete li').length > 0) {
//$(this).val($(".ui-autocomplete li:visible:first").text());
$(".ui-autocomplete li:visible:first").click();
}
else {
$(this).val('');
$('input:[name="release_port_id"]').val('');
}
});
的另一個問題該解決方案是,它實際上覆蓋在自動完成的change
事件,並預期它不執行。這就是我包括else
部分的原因。這不像它看起來的樣子,而是一個概念證明。
我更新了jQuery-UI組合框演示以支持自動填充。看到我的回答在這評論:http://stackoverflow.com/questions/2587378/how-to-implement-mustmatch-and-selectfirst-in-jquery-ui-autocomplete/6387781#6387781 – 2011-06-17 15:06:59