7

我有文本框名称 txtEmailList,我为其提供了自动完成列表,

 <asp:TextBox runat="server" ID="txtEmailList" CssClass="txtAutoComplete">

自动完成脚本

$('#txtEmailList').autocomplete({
                source: function(request, response) {
// this is the ajax call, which is running successfully
                    var msg = 
Assessments_JqueryAutoComplete.AutoComplete(request.term).value; //(ajaxpro functions)
                    response(msg.d); 
                }

            });

输出将像这样(在萤火虫中显示为纯文本),我如何将此数组附加到源属性。(我不能使用 $.ajax 方法,因为我需要使用 ajaxpro 作为办公规则),所以我从 ajax 调用中获取了数组列表,如何绑定自动完成。

["List 1","List 2","List 3","List 4"];/* // 这是 jquery 的输出响应(来自 firebug)

[AjaxPro.AjaxMethod(HttpSessionStateRequirement.ReadWrite)]
public List<string> AutoComplete(string query)
{
List<string> objLisItmes = new List<string>();
objLisItmes.Add("List 1");
objLisItmes.Add("List 2");
objLisItmes.Add("List 3");
objLisItmes.Add("List 4");
return  objLisItmes;
}

这是响应标头中的萤火虫输出

Cache-Controlno-cache Content-Length40 Content-Typetext/plain; charset=utf-8 DateWed,2012 年 3 月 7 日 10:45:37 GMT Expires-1Pragmano-cache

4

4 回答 4

5

而不是返回一个列表。我会返回一个字符串数组:

[AjaxPro.AjaxMethod(HttpSessionStateRequirement.ReadWrite)]
public string[] AutoComplete(string query)
{
   List<string> objLisItmes = new List<string>();
   objLisItmes.Add("List 1");
   objLisItmes.Add("List 2");
   objLisItmes.Add("List 3");
   objLisItmes.Add("List 4");
   return  objLisItmes.ToArray();
}
于 2012-03-07T16:17:26.363 回答
2

而不是使用

$('#txtEmailList')

尝试使用

$('input[id$="txtEmailList"]')

由于您使用的是服务器控件 TextBox,因此您的 ID 很可能以“parentID1_parentID2_txtEmailList”之类的形式结束。上面的代码将抓取 ID 以“txtEmailList”结尾的输入。

这是我在我的测试项目中的做法,它正在工作。当然,我没有使用 AjaxPro,所以我不确定您将如何使用它,但也许它会给您一些想法。

<script type="text/javascript">
        $(function () {
            var element = $('input[id$="TextBox1"]');

            element.autocomplete({
                source: function (request, response) {
                    $.ajax({
                        url: "Default.aspx/GetList",
                        data: "{ 'term': '" + request.term + "' }",
                        dataType: "json",
                        type: "POST",
                        contentType: "application/json; charset=utf-8",
                        dataFilter: function(data) { return data; },
                        success: function (data) {
                            response($.map(data.d, function (item) {
                                return {
                                    value: item
                                }
                            }))
                        }
                    })
                }
            });
        });
    </script>
于 2012-03-13T11:51:55.477 回答
1

不应该是:

$('#txtEmailList').autocomplete({source: function(request, response) {
    // this is the ajax call, which is running successfully
    var msg = Assessments_JqueryAutoComplete.AutoComplete(request.term).value; //(ajaxpro functions)
    response(msg); 
    }

});

?

如果没有,我建议您尽可能使用 console.log(msg) 来分析响应对象。

于 2012-03-13T16:01:28.130 回答
1

只需确保您的 AJAX 调用返回有效的字符串格式,如这个虚拟示例。将其存储在变量中。然后用它来定义source这样的属性:

var availableValues = ["List 1","List 2","List 3","List 4"];
// var msg = Assessments_JqueryAutoComplete.AutoComplete(request.term).value;
$( "#txtEmailList" ).autocomplete({
    source: availableValues
});
于 2012-03-16T19:34:31.120 回答