我的目标是构建一个自动完成元素,该元素基于当前输入从SQL数据库中提取。这是必要的,因为被搜索的元素数量远远超过了json解串器的最大容量。
我使用smartAutoComplete插件,但我想整合并使用jQuery UI自动完成插件。似乎插件在我的源函数返回任何内容之前调用._renderMenu,并且没有任何内容被附加到页面主体。我在使用smartAutoComplete时使用deferred.promise()修复此问题,但jQuery UI似乎不喜欢这个解决方案。有小费吗?谢谢!
$("input#punch_box").autocomplete({
source: function (request, response) {
var dfd = new jQuery.Deferred();
var resArr = [];
MyAjax({
url: '../GetMemberFiltered',
data: { search_string: request.term },
success: function (data, status) {
$(data).each(function (indx, result) {
resArr.push({ value: result.first_name + " " + result.last_name + " " + result.email,
member_id: result.member_id
});
});
dfd.resolve(resArr);
}
});
return dfd.promise();
},
delay: 200
});
function monkeyPatchAutocomplete() {
var oldFn = $.ui.autocomplete.prototype._renderItem;
$.ui.autocomplete.prototype._renderItem = function (ul, item) {
alert(item.value);
return $("<li></li>")
.data("item.autocomplete", item)
.append("<a>" + item.value + "</a>")
.appendTo(ul);
};
};