Когда вы устанавливаете source
в строку, автозаполнение не использует свою внутреннюю функцию filter
.Чтобы выполнить фильтрацию после запроса, обработайте запрос самостоятельно:
source: function( request, response ) {
var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( request.term ), "i" );
if ( this.xhr ) {
this.xhr.abort();
}
this.xhr = $.ajax( {
url: "/home/suggest",
data: $.extend({username:"myname"}, request),
dataType: "json",
success: function( data ) {
response(
$.grep( data, function( value ) {
return matcher.test( value.label || value.value || value );
} )
);
},
error: function() {
response( [] );
}
} );
}
Объяснение:
filter
не является частью API виджета.Вы не должны перезаписывать внутренние функции библиотеки без веской причины.
Вместо этого вручную обрабатывайте пост-фильтрацию с опцией source
.Второй параметр response
обеспечивает обратный вызов для любого результата, который вы хотите передать виджету.Обработайте вызов AJAX вручную, а затем обработайте результат, прежде чем передать его обратно response
. См. Здесь объяснение того, как работает source
.
Отказ от ответственности:
Это плохая практика. Сначала фильтрация выполняется на сервере, по срокам, потом по клиенту, по ^
сопоставителю.Он отправляет ненужные данные по сети.Это должно быть сделано в одной точке.Либо предварительно загрузите все данные на клиент, либо просто разрешите серверу обрабатывать фильтрацию.
Используйте это только в том случае, если у вас обоих нет доступа к коду сервера и вы не можете предварительно загрузить.