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
jQueryUI自动完成零星行为_Jquery_Jquery Ui_Jquery Ui Autocomplete - Fatal编程技术网

jQueryUI自动完成零星行为

jQueryUI自动完成零星行为,jquery,jquery-ui,jquery-ui-autocomplete,Jquery,Jquery Ui,Jquery Ui Autocomplete,下面是我的自动完成代码。问题是它基本上是有效的。假设我有一系列的结果,比如test1、test2、test3等等。如果我输入“t”,它们就会弹出,当我在“te”中输入e时,它们就会消失。如果我加上“s”,它会进一步缩小范围。也不总是第二个字母。这似乎只是零星的。请帮忙。我已经确认返回的数据是可靠的,因此后端没有任何内容 //Server autocomplete $("#txtSearchServer").keyup(function (event) {

下面是我的自动完成代码。问题是它基本上是有效的。假设我有一系列的结果,比如test1、test2、test3等等。如果我输入“t”,它们就会弹出,当我在“te”中输入e时,它们就会消失。如果我加上“s”,它会进一步缩小范围。也不总是第二个字母。这似乎只是零星的。请帮忙。我已经确认返回的数据是可靠的,因此后端没有任何内容

        //Server autocomplete
        $("#txtSearchServer").keyup(function (event) {
            $.ajax({
                url: 'edit/EditService.svc/SearchServers',
                type: 'GET',
                data: { 'term': $("#txtSearchServer").val() },
                dataType: 'json',
                success: function (data) {
                    var listServers = [];
                    $.map(data.d, function (item) {
                        ///working here to do server autocomplete!!!!!!!
                        listServers.push(item.ServerName);
                        $("#txtSearchServer").autocomplete({
                            source: listServers
                        });
                    });
                },
                error: function (a, b, c) {
                    $('.Toast').html('Error Retreiving Servers for autocomplete!');
                }
            });
        });
答案是:这应该能解决问题


编辑:我还想知道为什么你们要动态预取结果,你们不能马上得到完整的列表吗?还是因为数据太多?

查看您正在使用asp.net的代码

所以这应该对你有用:

function AutocompleteJSONParse(data) {
    var rows = new Array();
    var rowData = null;
    for (var i = 0, dataLength = data.length; i < dataLength; i++) {
        rowData = data[i];
        rows[i] = {
            value: rowData.ServerName,
            label: rowData.ServerName
        };
    }
    return rows;
};
$("#txtSearchServer").autocomplete({
    source: function(request, response) {
        var pString = '{"term":"' + request.term + '"}';
        $.ajax({
            url: 'edit/EditService.svc/SearchServers',
            type: 'GET',
            dataType: "jsond",
            type: "POST",
            contentType: "application/json",
            converters: {
                "json jsond": function(msg) {
                    return msg.hasOwnProperty('d') ? msg.d : msg;
                }
            },
            data: pString,
            success: function(data) {
                var rows = AutocompleteJSONParse(data);
                response(rows);
            }
        });
    },
    error: function(a, b, c) {
        $('.Toast').html('Error Retreiving Servers for autocomplete!');
    },
    minLength: 2,
    delay: 1000
});
函数自动完成JSONPARSE(数据){
var rows=新数组();
var rowData=null;
对于(var i=0,dataLength=data.length;i
为什么每次ajax成功时,您都会在keyup事件之上启动autocomplete?自动完成应该在你使用它的时候启动一次,所以它是动态的,取决于你输入的内容。每次键入字母时,它都会在文本框中查询webservice的完整值,并返回前10个匹配名称。(注意,我以前从未使用过jquery ui autocomplete…),因此如果我在ajax查询之外启动autocomplete并将源指定为listServers,我所要做的就是更新这个变量,它会自动更新结果?我的意思是,你应该有源代码:listServers,在autocomplete和ajax调用之外定义的listServers,并且在ajax调用成功时更新它。基本上,您已经在输入字段上应用了autocomplete的事件,您正在应用keyup事件,并一直覆盖该变量,通过在每次键控后创建新的自动完成实例。好的,我准确地粘贴了该代码,并且每次键控都会执行返回的查询。好的,但我从未获得自动完成弹出窗口。你能在please中设置你的代码,并在完成后发布链接吗。另外,请看一下这篇文章,说明了如何动态地改变自动完成plgugin的来源。我还更新了我的源代码以反映这一点。我没有准确地测试这段代码,但经过研究,这是我得出的基本结论。ajax调用需要在autocomplete源代码中,这就是我所做的,它可以工作。谢谢asp.net的一个关键元素是转换器。这与较旧的asp.net版本以及较新的版本向后兼容,因此您所转换的(data.d)可以简单地进行转换—它可以检测存在并使其一致。我使用了parse而不是.map,因为它使我能够灵活地在源端使用非常复杂的json对象,并将多个值映射到其他用途,例如。它不会缓存潜在的数据,但是,因为我在数据源中使用了近100000个值,并进行了多项匹配,所以您可能希望这样做。