一個默認選項我有一個jQuery自動完成 -顯示在自動完成搜索
<input type="text" id="contactName" class="form-control input-lg formData textVal" placeholder="Contact Name*"/>
與jQuery代碼如下 -
$('#contactName').autocomplete({
source: contacts,
minLength: 0,
autoFocus: true,
open: function(event) {},
close: function() {},
focus: function(event,ui) {
},
select: function(event, ui) {
if(ui.item.id == 'create-new-contact'){
//do something to create a new contact
}else{
$('#contactIDVal').val(ui.item.id);
}
}
}).on('focus', function(){$(this).autocomplete("search");});
$("#contactName").autocomplete('instance')._renderMenu = function(ul, items) {
var self = this;
ul.prepend('<li value="create-new-contact">Create New Contact</li>');
$.each(items, function(index, item) {
self._renderItemData(ul, item);
});
};
我想是要表明總是「新建聯繫人」選項。即使鍵入的文本與我的數組或NOT中的元素匹配。我能夠實現第一部分,但是當鍵入的文本與不匹配時,數組中的任何項都不會調用_renderMenu。無論輸入的文本是否與源數組中的任何內容匹配,如何顯示一個默認選項。
除此之外,我創建默認項目在這裏 -
ul.prepend('<li value="create-new-contact">Create New Contact</li>');
是給我下面的錯誤,當我把我的鼠標移到該項目 -
Uncaught TypeError: Cannot read property 'value' of undefined
at $.(anonymous function).(anonymous function).menufocus (http://code.jquery.com/ui/1.11.4/jquery-ui.js:3012:49)
at HTMLUListElement.handlerProxy (http://code.jquery.com/ui/1.11.4/jquery-ui.js:726:7)
at HTMLUListElement.dispatch (https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js:4:8549)
at HTMLUListElement.r.handle (https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js:4:5252)
at Object.trigger (https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js:4:7650)
at HTMLUListElement.<anonymous> (https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js:4:15517)
at Function.each (https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js:2:2975)
at m.fn.init.each (https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js:2:835)
at m.fn.init.trigger (https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js:4:15493)
at $.(anonymous function).(anonymous function)._trigger (http://code.jquery.com/ui/1.11.4/jquery-ui.js:813:16)
任何想法如何我可以實現這個沒有所有這些垃圾? 感謝
編輯 - 我@ADyson的幫助
$('#contactName').autocomplete({
source: contacts,
response: function(event, ui){
ui.content.push({id:'create-new-contact', label:'Create New Contact', value:'Create New Contact'});
},
minLength: 0,
autoFocus: true,
open: function(event) {},
close: function() {},
focus: function(event,ui) {
},
select: function(event, ui) {
if(ui.item.id == 'create-new-contact'){
//do some stuff here
}else{
$('#contactIDVal').val(ui.item.id);
}
}
}).on('focus', function(){$(this).autocomplete("search");});
「源」選項可以是一個函數。所以你可以使用它來定義一個函數來搜索你的數據庫/數組,但是也可以用默認選項在返回的數據中插入一個額外的項目。這是IMO最乾淨的選項。有關如何實現的詳細信息,請參閱http://api.jqueryui.com/autocomplete/#option-source – ADyson
我可以這樣做,但事實是,在此之前我有另一個自動完成功能,這使得數據庫命中併爲自身獲取所有內容,併爲此特定自動完成添加所有內容。我不想爲了這個而再次擊中數據庫。創建此自動完成功能後,我已經在'contacts'數組中創建了數據。任何其他解決方法來保存數據庫匹配和實現我想要的?我對想法持開放態度...... –
您給「來源」的功能仍然可以從您的聯繫人數組中讀取,因此不需要進行數據庫調用。 (畢竟,這是一個功能,你可以讓它做任何你喜歡的事!)。這意味着您可以在向用戶顯示建議之前修改其內容。 – ADyson