【问题标题】:Default jquery autocomplete search excluding specific characters, is it possible?默认jquery自动完成搜索不包括特定字符,这可能吗?
【发布时间】:2014-08-15 22:59:37
【问题描述】:

您知道是否可以自定义自动完成 Jquery,排除搜索引擎中的某些特定字符,假设数据源不是通过 ajax 加载,而是之前加载和管理的客户端

var club_ajax_success = function (data) {
  $("#sm_autosearch_clubteam").autocomplete({
    source: data,
    select: club_autocomplete_select
  });
  $('#sm_autosearch_clubteam').prop('disabled', '').prop('placeholder', 'Zoek een club');
};

我处理团队名称,其中一些是这样写的

  • H.M.S.
  • 洛杉矶梦想
  • 纽约入侵者

我希望搜索模块能够在结果中管理这些团队,即使我查找 HMS、LA Dream 或 NY 之类的字符串,而不是用点填充字符。有人有什么建议吗?

提前致谢

【问题讨论】:

  • 我发现采用的解决方案很有用here

标签: jquery autocomplete client-side jquery-autocomplete


【解决方案1】:

您可以在这里做一些事情。最好的办法可能是只运行两次源搜索,因此当用户输入一个值时,您首先针对您的值运行查找以进行直接匹配;

User enters - HMS
Source returns - H.M.S.

No match

因此,在此之后,您需要尝试将用户输入的内容与格式化的源值进行匹配;

User enters - HMS
Source returns formatted string (remove periods) - HMS

Match 
Output original source value

您可能要考虑的另一件事是用户通常不会强烈键入他们的搜索;

User enters - hms
Source returns formatted string (remove periods) - HMS

No match

因此,在尝试匹配任何内容之前,您还需要将两个字符串强制为小写。

假设您的来源和搜索方法是在后端完成的,这真的很容易做到。使用 AJAX 获取您的源代码,如果它足够小,您甚至可以将其存储在客户端机器上以供将来使用,然后只需在代码中进行字符串操作并传回源模型。

我还假设您可能希望使用纯 JQuery 来执行此操作,在这种情况下,我会询问您如何获取源代码并对其进行编辑。

C# ASP.NET MVC 中的一个非常基本的示例看起来有点像这样;

脚本:

$(document).ready(function () {
        $("#searchTerm").autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: "/Home/SearchSites",
                    data: "{ 'searchTerm': '" + request.term + "' }",
                    dataType: "json",
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    dataFilter: function (data) { return data; },
                    success: function (data) {
                        response($.map(data, function (item) {
                            return {
                                label: item.value,
                                value: item.value,
                                id: item.id
                            }
                        }))
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        alert(textStatus);
                    }
                });
            },
            minLength: 1,
            select: function (even, ui) {
                window.location.href = '/Till/Index/' + ui.item.id;
            }
        });
    });

控制器:

public JsonResult SearchSites(string searchTerm)
{
    var suggestedSites = db.Sites.Where(s => searchTerm == null || 
        s.Name.ToLower()
            .StartsWith(searchTerm.ToLower()))
            .Select(x => new { id = x.SiteUid_PK, value = x.Name })
        .Take(5).ToList();
    var result = Json(suggestedSites, JsonRequestBehavior.AllowGet);
    return result;
}

这必须适应您使用的任何语言,但逻辑将保持几乎完全相同,您只需向控制器方法添加一些额外的字符串格式。

【讨论】:

  • 实际上我的数据存储在 javascript 中,它们依赖于以前的查询,但我用于此特定自动完成的数据是客户端的。我会更好地解释这个问题,无论如何感谢您的澄清
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 2013-08-20
  • 1970-01-01
相关资源
最近更新 更多