【问题标题】:Do not filter results in jquery/asp.net autocomplete不要在 jquery/asp.net 自动完成中过滤结果
【发布时间】:2012-01-24 16:21:16
【问题描述】:

我通过 ajax 调用完成了 jquery 自动完成。我正在我的代码后面的方法中进行过滤。我不想在 UI 中过滤它们。怎么做。更具体地说,如果用户键入“St”。例如我正在返回具有“St”的值。以及结果中的“圣”。但是 jquery 没有显示带有“Saint”的结果。如何让 jquery 自动完成功能也显示“Saint”?

Jquery 中的代码

 function GetNames(text) {
$.ajax({
type: "POST",
url: "Default.aspx/GetSchools",
dataType: "json",
data: '{ "data":"' + text + '"}',
contentType: "application/json; charset=utf-8",
success: function(data) {
$('#university').autocomplete({
source: data.d,
focus: function(event, ui) {
$('#university').val(ui.item.Descr);
return false;
},
select: function(event, ui) {
$('#university').val(ui.item.Descr);
$('#universityID').val(ui.item.UnivCode);
return false;
}
});
}
});
}

.cs 文件中的代码隐藏

public static List<DataClass.School> GetSchools(string data)
        {
            DataTable dt = (DataTable)HttpContext.Current.Session["Schools"];

            data = data.ToLower();
            Debug.WriteLine(data);

            var ret = new List<TestApplication.DataClass.School>();
            ret = (from l in dt.AsEnumerable()
                   let s = l["Descr"].ToString().ToLower()
                   where (s.Contains(data) || s.Contains("saint"))
                   select new TestApplication.DataClass.School
                   {
                       Descr = l["Descr"].ToString(),
                       UnivCode = l["UnivCode"].ToString()
                   }).Take(20).ToList();

            Debug.WriteLine(ret.Count.ToString());

        return ret.ToList();
        }

【问题讨论】:

  • 如果您向我们展示您的代码,我们可以提供更好的帮助
  • 好的。我对 AjaxAutocomplete 进行了同样的尝试,并且效果很好。我不确定我在 JQuery 中缺少什么。

标签: jquery asp.net autocomplete


【解决方案1】:

好的。它在网络上的某个地方说我可能可以更改 jQuery。因为我在代码隐藏中过滤结果,所以我改变了我的 jQuery 不过滤任何东西。在 jquery-ui.js 的 autocomplete 扩展方法中改为

var matcher = new RegExp($.ui.autocomplete.escapeRegex(''), "i");

这很好用。

【讨论】:

    【解决方案2】:

    应该像jqueryui documentation中的例子一样简单地将源设置为url

    【讨论】:

    • 我已经设置了来源,但我不想过滤结果。例如。正如我之前提到的,如果用户键入 Jr - 我将返回包含 Junior 的结果。我不希望那些被 jquery 过滤。
    • 这与 jquery 无关。结果来自服务器。这是您查询结果的地方。因此,您查询结果的方式将决定返回给客户端的内容。
    • 即使在返回结果之后,并非所有值都显示在下拉列表中。那就是我有问题的地方。如果您看到上面的代码和可能的硬编码 Jr 和 Junior,如果您键入 Jr 而不是 Junior,则自动完成中的下拉菜单将仅显示 Jr。我不希望该过滤器发生。
    猜你喜欢
    • 2014-05-09
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2011-01-04
    • 1970-01-01
    • 2014-01-19
    相关资源
    最近更新 更多