Javascript jQuery几乎赢得了me-UIAutoComplete;“数据未定义”;
jQuery几乎赢得了我。我已经在StackOverflow的答案中看到了很多,但我找不到解决问题的方法 我在项目中使用jQueryUIAutoComplete,如果没有返回结果,我需要呈现一条默认消息我正在使用“\u renderItem”,如下面所示。Javascript jQuery几乎赢得了me-UIAutoComplete;“数据未定义”;,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,jQuery几乎赢得了我。我已经在StackOverflow的答案中看到了很多,但我找不到解决问题的方法 我在项目中使用jQueryUIAutoComplete,如果没有返回结果,我需要呈现一条默认消息我正在使用“\u renderItem”,如下面所示。 var autocompleteDir = $("#search"); autocompleteDir.autocomplete({ source: function (request, response) { po
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);
}
};
我正在使用jQuery1.10.2和jQueryUI1.10.3。有人有好主意吗
编辑1:
如果我在“来源”之前使用此选项:
我有以下错误:
Cannot read property 'type' of undefined
如果您帮助我解决这个问题,我可以使用“响应”来设置“加载”和“无”结果的格式和样式吗
编辑2
var populate=函数(术语、响应){
$.getJSON(
“.json”,
{search:term},
函数(json){
var结果=[];
$.each(json、函数(键、值){
var item={};
item.type='';
item.label=value.name;
item.value=value.name;
结果:推送(项目);
})
如果(result.length==0){
var item={};
item.type=“noResult”;
item.label=“创建”“+term+”;
项目价值=期限;
结果。推送(项目)
}
反应(结果);
}
);
};
编辑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){
for(ui.content中的变量i){
if(ui.content[i].type==“正在加载”){
ui.content[i]={
标签:“装载”,
值:“”
}
}
}
}
而不是在UI的中间渲染“加载”,所有的字符串都显示给用户(加载)。
< P>不需要使用<代码> IN ReNeDistIO/CODE >,因为jQuery提供了一个在搜索返回和结果显示之前触发的事件,如果搜索返回为空,则可以修改它以返回默认值。看。您可以这样做: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));
},
response: function(event, ui){
if(ui.content.length === 0){
ui.content.push({label:"default",value:"value"}); /* modify to your liking */
}
}
});
改变这种技术应该可以解决这两个问题
编辑:
在第三次编辑中,如果要在页面的其他位置更改div的值,则需要自己在响应函数中进行更改,而不是在函数中返回该值
response: function(event, ui){
if(ui.content.length === 0){
$('#id-of-div-to-change').text("Loading");
}
}
您的第二个错误很奇怪-
$(“”)
本身不应返回未定义的。您正在处理的是您创建的对象,还是其他可能没有类型的属性的对象?另外:不要忘记javascript分号插入。我认为您的返回语句可能不会计算它下面的物理行。请共享populate
method@JimCote其他已具有类型属性。我很快会更新我的问题,所以你会看到。@ArunPJohny我很快会粘贴我的代码,请查找“编辑2”。在编辑1中,你不能使用ui.item.type
,因为ui
对象只有一个字段content
,它是一个匹配结果的数组,作为具有值和标签字段的对象。因此,您可以检查content
数组中每个元素的value
,例如ui.content[0]。value==='carregando'
谢谢,现在问题解决了。但是我的标签没有呈现(见新的编辑)没有问题;那边的向上箭头表示感谢。另外,看起来您使用了我的代码作为答案。;)哈哈,现在你不能帮我发现为什么标签没有渲染?好吧,我试试看。只有一个答案,这是你的答案,所以你给了你学士学位。
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:""
}
}
}
}
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));
},
response: function(event, ui){
if(ui.content.length === 0){
ui.content.push({label:"default",value:"value"}); /* modify to your liking */
}
}
});
response: function(event, ui){
if(ui.content.length === 0){
$('#id-of-div-to-change').text("Loading");
}
}