В JQuery UI v1.8rc3, the autocomplete widget принимает source вариант, который может быть либо строка, массив или функция обратного вызова. Если это строка, автозаполнение делает GET на этом URL, чтобы получить параметры/предложения. Если массив, автозаполнение выполняет поиск, как вы указали, для наличия типизированных символов в любой позиции в терминах массива. Окончательный вариант - это то, что вы хотите - функция обратного вызова.
Из документации автозаполнения:
Третьего варианта, обратный вызов, обеспечивает максимальную гибкость, и может быть использован для подключения любого источника данных для автозаполнения. Обратный вызов получает два аргумента:
• Объект request
с единственным свойством, называемым термином, который относится к значению, которое в настоящее время используется для ввода текста.Например, когда пользователь вводил «новое летнее» в поле города, которое настроено на автозаполнение, request.term
будет удерживать «новый год».
• Функция response
, обратный вызов, который ожидает, что один аргумент содержит данные, предлагаемые пользователю. Эти данные должны быть отфильтрованы на основе предоставленного термина и должны быть массивом в формате, разрешенном для простых локальных данных: String-Array или Object-Array с меткой/значением/оба свойства.
Пример кода:
var wordlist= [ "about", "above", "across", "after", "against",
"along", "among", "around", "at", "before",
"behind", "below", "beneath", "beside", "between",
"beyond", "but", "by", "despite", "down", "during",
"except", "for", "from", "in", "inside", "into",
"like", "near", "of", "off", "on", "onto", "out",
"outside", "over", "past", "since", "through",
"throughout", "till", "to", "toward", "under",
"underneath", "until", "up", "upon", "with",
"within", "without"] ;
$("#input1").autocomplete({
// The source option can be an array of terms. In this case, if
// the typed characters appear in any position in a term, then the
// term is included in the autocomplete list.
// The source option can also be a function that performs the search,
// and calls a response function with the matched entries.
source: function(req, responseFn) {
var re = $.ui.autocomplete.escapeRegex(req.term);
var matcher = new RegExp("^" + re, "i");
var a = $.grep(wordlist, function(item,index){
return matcher.test(item);
});
responseFn(a);
}
});
Несколько ключевых моментов:
- вызов
$.ui.autocomplete.escapeRegex(req.term);
Это ускользает термин поиска так, что любые регулярные выражения-значимые термины в тексте набраны пользователь рассматривается как обычный текст. Например, точка (.) Имеет смысл для регулярного выражения. Я узнал об этой функции escapeRegex, прочитав исходный код автозаполнения.
- линия с
new Regexp()
. Он задает регулярное выражение, начинающееся с^(Circumflex), что подразумевает, что оно будет соответствовать только тогда, когда типизированные символы появятся в начале члена в массиве, чего вы хотели. Он также использует опцию «i», которая подразумевает нечувствительность к регистру.
- утилита
$.grep()
просто вызывает предоставленную функцию на каждом члене предоставленного массива. Функция в этом случае просто использует regexp, чтобы увидеть, соответствует ли член в массиве для того, что было напечатано.
- Наконец, responseFn() вызывается с результатом поиска.
работает демо: http://jsbin.com/ezifi
что это выглядит следующим образом:
Только примечание: я найти документацию по автозаполнению быть довольно незрелым в этой точке. Я не нашел примеров, которые сделали это, и я не мог найти рабочий документ, для которого необходимы файлы .css или какие классы .css будут использоваться. Я узнал все это от проверки кода.
Смотрите также how can I custom-format the Autocomplete plug-in results?
У henchman есть решение для gmail как поиск http: // stackoverflow.com/вопросы/2382497/jquery-autocomplete-plug-in-search-configuration/2405646 # 2405646 –