Возможно ли использовать автозаполнение jquery по умолчанию, исключая определенные символы?

Знаете ли вы, можно ли настроить автозаполнение 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, вместо того, чтобы заполнять символы точками. У кого-нибудь есть предложения?

заранее спасибо


person axel    schedule 15.08.2014    source источник
comment
Я нашел полезным решение, принятое здесь   -  person axel    schedule 18.08.2014


Ответы (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;
}

Это должно быть адаптировано для любого языка, который вы используете, но логика останется почти такой же, и вам просто нужно будет добавить дополнительное форматирование строки в метод контроллера.

person Inspector Squirrel    schedule 15.08.2014
comment
На самом деле мои данные хранятся в javascript, они зависят от предыдущего запроса, но мои данные для этого конкретного автозаполнения находятся на стороне клиента. Я объясню это лучше по вопросу, все равно спасибо за разъяснение - person axel; 15.08.2014