jQuery 几乎赢得了我。我已经在 StackOverflow 的答案中看到了很多很多,但我找不到解决我的问题的方法。
我在我的项目中使用 jQuery UI Autocomplete,如果没有返回结果,我需要呈现默认消息。我正在使用“_renderItem”,如下所示。
var autocompleteDir = $("#search");
autocompleteDir.autocomplete({
source: function (request, response) {
populate(request.term, response);
result = $.ui.autocomplete.filter(result, request.term)
var item = {};
item.type = 'loading';
item.label = "Loading..";
item.value = "";
result.unshift(item)
response(result.slice(0, 10));
}
});
autocompleteDir.data("ui-autocomplete")._renderItem = function (ul, item) {
if (item.type === "loading") {
return $('<li></li>')
.data("ui-autocomplete-item", item)
.append("<div style='text-align: center;'>" + item.label + "</div>")
.appendTo(ul);
}
};
这就是我在控制台上得到的:
Uncaught TypeError: Cannot read property 'type' of null
Uncaught TypeError: Cannot call method 'data' of undefined
我正在使用 jQuery 1.10.2 和 jQuery UI 1.10.3。有人有个好主意吗?
编辑1:
如果我在“来源”之前使用它:
response: function(event, ui){
if (ui.item.type === "loading"){
ui.content.push({label:"Loading",value:"Loading"})
}
}
我有以下错误:
Cannot read property 'type' of undefined
如果你帮我解决这个问题,我可以使用“响应”来格式化和设置我的“加载”和“无”结果吗?
编辑 2
var populate = function(term, response) {
$.getJSON(
'<%= my_rails_path %>.json',
{search: term},
function(json) {
var result = [];
$.each(json, function(key, value) {
var item = {};
item.type = '';
item.label = value.name;
item.value = value.name;
result.push(item);
})
if (result.length == 0) {
var item = {};
item.type = "noResult";
item.label = "Create '" + term + "'";
item.value = term;
result.push(item)
}
response(result);
}
);
};
编辑 3
现在问题解决了,但是标签是字面上显示的,但我希望它被渲染。看代码,你就明白了:
response: function(event, ui){
for(var i in ui.content){
if (ui.content[i].type==="loading"){
ui.content[i] = {
label:"<div style='text-align: center;'>Loading</div>",
value:""
}
}
}
}
而是在 ui 中间呈现“正在加载”,所有字符串都显示给用户(正在加载)。