В jQuery UI v1.8rc3, виджет автозаполнения принимает параметр source , который может быть либо строкой, массивом, либо функцией обратного вызова. Если это строка, autocomplete выполняет GET для этого URL, чтобы получить параметры / предложения. Если массив, автозаполнение выполняет поиск, как вы указали, на наличие типизированных символов в любой позиции в терминах массива. Последний вариант - то, что вы хотите - функция обратного вызова.
Из документации по автозаполнению:
Третий вариант, обратный вызов, обеспечивает наибольшую гибкость и может использоваться для подключения любого источника данных к автозаполнению. Обратный вызов получает два аргумента:
• Объект request
с единственным свойством, называемым «term», которое относится к значению, которое в данный момент находится в текстовом вводе. Например, когда пользователь ввел «новый йо» в поле города, для которого задано автоматическое заполнение, 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()
просто вызывает предоставленную функцию для каждого члена в указанном массиве. Функция в этом случае просто использует регулярное выражение, чтобы увидеть, совпадает ли термин в массиве с тем, что было введено.
- наконец, responseFn () вызывается с результатом поиска.
рабочая демоверсия: http://jsbin.com/ezifi
как это выглядит:
Просто примечание: я считаю, что документация по автозаполнению на данный момент довольно незрелая. Я не нашел примеров, которые это делали, и я не смог найти рабочий документ, для которого нужны файлы .css или какие классы .css будут использоваться. Я узнал все это из проверки кода.
См. Также, как мне отформатировать результаты плагина автозаполнения?