Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery几乎赢得了me-UIAutoComplete;“数据未定义”;_Javascript_Jquery_Jquery Ui - Fatal编程技术网

Javascript jQuery几乎赢得了me-UIAutoComplete;“数据未定义”;

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

jQuery几乎赢得了我。我已经在StackOverflow的答案中看到了很多,但我找不到解决问题的方法

我在项目中使用jQueryUIAutoComplete,如果没有返回结果,我需要呈现一条默认消息我正在使用“\u 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);
    }
};
我正在使用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");
        } 
    }