Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
Jquery仅自动完成查找“C”_Jquery_Jquery Ui_Jquery Ui Autocomplete - Fatal编程技术网

Jquery仅自动完成查找“C”

Jquery仅自动完成查找“C”,jquery,jquery-ui,jquery-ui-autocomplete,Jquery,Jquery Ui,Jquery Ui Autocomplete,我正在用jquery编写一个自动完成程序,它似乎只找到字母C。我知道为什么会发生这种情况吗?我使用json提要实现的另一个自动完成功能可以正常工作,但这一个需要显示一个排序网格,您可以从第一列信息形状中进行选择。当我输入C时,我会得到下拉列表,但超出该列表的任何组合都不起作用。此外,如果你只是输入L或A,它应该弹出一个选择,但没有这样的运气 JSON Jquery代码 $.getJSON("resources/data/frameshape.json", function(projects)

我正在用jquery编写一个自动完成程序,它似乎只找到字母C。我知道为什么会发生这种情况吗?我使用json提要实现的另一个自动完成功能可以正常工作,但这一个需要显示一个排序网格,您可以从第一列信息形状中进行选择。当我输入C时,我会得到下拉列表,但超出该列表的任何组合都不起作用。此外,如果你只是输入L或A,它应该弹出一个选择,但没有这样的运气

JSON

Jquery代码

$.getJSON("resources/data/frameshape.json", function(projects) 
        {

        $( "#frameShaping" ).autocomplete({
            source: projects,
            select: function( event, ui ) {
                $( "#frameShaping" ).val( ui.item.shape );
                return false;
            }
        })

        .data( "autocomplete" )._renderItem = function( ul, item ) {

            if (ul.children().length == 0){
                    ul.append( '<li class="t2"><p class="testing">Shape</p>
                    <p class="testing">Eye</p><p class="testing">Bridge</p>
                    <p class="testing">Color<p></li>' );
            }//end if

            return $( "<li></li>" )
                .data( "item.autocomplete", item )
                .append( "<a><p class='linkage'>" 
                    + item.shape + "</p><p class='linkage'>" 
                    + item.eye + " </p><p class='linkage'>" 
                    + item.bridge + "</p><p class='linkage'> " + 
                    item.color +"</p></a>" )
                .appendTo( ul );

        };
    });
HTML


Autocomplete要求数组中的对象包含标签属性、值属性或两者。为了使其正常工作,您只需将以下属性之一添加到阵列中的对象:

$.getJSON("resources/data/frameshape.json", function(projects) {
    $.each(projects, function (i, project) {
        project.label = project.shape;
    });

    $("#frameShaping").autocomplete({
        source: projects,
        /* other options */
    });
});
示例:显然,没有AJAX调用

另一个选项是通过源选项提供您自己的过滤逻辑。如果您不想向源对象添加额外属性,这一选项尤其有用。基本上,您可以提供一个函数,该函数接受请求对象和响应回调,并在函数内部执行任何筛选操作:

$("#frameShaping").autocomplete({
    source: function (request, response) {
        /* this is also how jQueryUI builds a regex to find candidates internally */
        var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");

        response($.grep(projects, function (value) {
            return matcher.test(value.shape);
        }));
    },
    /* etc. */
})
例如:

我建议使用第二个选项,因为它不需要您在初始化小部件之前额外迭代源数组

至于为什么它总是使用C输入,它实际上是用于字符串中的任何字符:[object]

这是因为,jQueryUI是:

例如,从您键入的C输入构建正则表达式 使用接受字符串的RegEx对象的方法 现在,当您向测试方法传递任何内容时,根据RegExp.test的ECMAScript规范,参数将使用toString转换为字符串

所以在这个特殊的例子中,当您获取一个对象并对其调用toString时,您会得到与C匹配的[object object]。因为这对数组中的每个对象都是正确的,所以如果搜索这些字符中的任何一个,实际上都会返回每个项目


下面是一个简单的例子:Autocomplete需要一个数组,其中的对象包含label属性、value属性或两者。为了使其正常工作,您只需将以下属性之一添加到阵列中的对象:

$.getJSON("resources/data/frameshape.json", function(projects) {
    $.each(projects, function (i, project) {
        project.label = project.shape;
    });

    $("#frameShaping").autocomplete({
        source: projects,
        /* other options */
    });
});
示例:显然,没有AJAX调用

另一个选项是通过源选项提供您自己的过滤逻辑。如果您不想向源对象添加额外属性,这一选项尤其有用。基本上,您可以提供一个函数,该函数接受请求对象和响应回调,并在函数内部执行任何筛选操作:

$("#frameShaping").autocomplete({
    source: function (request, response) {
        /* this is also how jQueryUI builds a regex to find candidates internally */
        var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");

        response($.grep(projects, function (value) {
            return matcher.test(value.shape);
        }));
    },
    /* etc. */
})
例如:

我建议使用第二个选项,因为它不需要您在初始化小部件之前额外迭代源数组

至于为什么它总是使用C输入,它实际上是用于字符串中的任何字符:[object]

这是因为,jQueryUI是:

例如,从您键入的C输入构建正则表达式 使用接受字符串的RegEx对象的方法 现在,当您向测试方法传递任何内容时,根据RegExp.test的ECMAScript规范,参数将使用toString转换为字符串

所以在这个特殊的例子中,当您获取一个对象并对其调用toString时,您会得到与C匹配的[object object]。因为这对数组中的每个对象都是正确的,所以如果搜索这些字符中的任何一个,实际上都会返回每个项目

下面是一个简单的例子: