Try to override the default filter logic provided by the completion.
// Overrides the default autocomplete filter function to search for matched on atleast 1 word in each of the input term words $.ui.autocomplete.filter = function (array, terms) { arrayOfTerms = terms.split(" "); var term = $.map(arrayOfTerms, function (tm) { return $.ui.autocomplete.escapeRegex(tm); }).join('|'); var matcher = new RegExp("\\b" + term, "i"); return $.grep(array, function (value) { return matcher.test(value.label || value.value || value); }); };
Fiddle
Or create your own filter function and process the returned search query to keep the full filter function as is.
function customFilter(array, terms) { arrayOfTerms = terms.split(" "); var term = $.map(arrayOfTerms, function (tm) { return $.ui.autocomplete.escapeRegex(tm); }).join('|'); var matcher = new RegExp("\\b" + term, "i"); return $.grep(array, function (value) { return matcher.test(value.label || value.value || value); }); }; $("#tags").autocomplete({ source: availableTags, multiple: true, mustMatch: false ,source: function (request, response) { response(customFilter( availableTags, request.term)); }, });
Fiddle
source share