Я использую автозаполнение jQuery UI с локальным источником данных (source: myArray
). Я хочу, чтобы автозаполнение предлагало только те результаты, которые начинаются с введенной строки, а не по умолчанию не учитывает регистр. Есть ли простое решение для этого или я должен предоставить свой собственный запрос/исходный обратный вызов?
Использование автозаполнения jQuery UI начинается с
Ответ 1
В настоящее время я сделал это таким образом, не уверен, есть ли лучшее решение:
source: function(request, response) {
var filteredArray = $.map(orignalArray, function(item) {
if( item.value.startsWith(request.term)){
return item;
}
else{
return null;
}
});
response(filteredArray);
},
Этот подход также позволил наложить ограничение (например, 10 предметов) на количество предметов, которые будут показаны.
Ответ 2
Смотрите это:
Слова начала матча:
http://blog.miroslavpopovic.com/jqueryui-autocomplete-filter-words-starting-with-term
Он переопределяет метод автозаполнения фильтра. Я использую это, и он работает хорошо.
// Overrides the default autocomplete filter function to search only from the beginning of the string
$.ui.autocomplete.filter = function (array, term) {
var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(term), "i");
return $.grep(array, function (value) {
return matcher.test(value.label || value.value || value);
});
};
Слово соответствия:
Матч начинается с любого слова в строке.
например. "LHR london" соответствует "лондон"
var matcher = new RegExp("\\b" + $.ui.autocomplete.escapeRegex(term), "i");
\ b утверждают позицию на границе слова (^\w\\ w $\\W\w\\ w\W)
Ответ 3
Я вошел в код Jqueryui и переключил его туда.
Если вы посмотрите в разделе автозаполнения, вы увидите следующую строку:
filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i")
Измените его следующим образом (будьте осторожны, это глобальное изменение):
filter:function(a,b){var g=new RegExp("^" + d.ui.autocomplete.escapeRegex(b),"i")
Ответ 4
Здесь немного другой способ делать чувствительный к регистру поиск. Обратите внимание на отсутствие "i" при создании регулярного выражения во втором примере, что и вызывает нечувствительность к регистру при реализации по умолчанию.
регистр нечувствителен:
$('#elem').autocomplete({
source: array
});
чувствительный к регистру:
$('#elem').autocomplete({
source: function(request, response) {
var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term, ""));
var data = $.grep( array, function(value) {
return matcher.test( value.label || value.value || value );
});
response(data);
}
});
Ответ 5
вы можете использовать тот же путь в Примеры автозаполнения JQuery UI
<script>
$("#autocompleteInputField").autocomplete({
source: function(request, response) {
var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i");
response($.grep(myArray, function(item){
return matcher.test(item);
}) );
}
});
</script>
ИЛИ другим способом с использованием метода $.map
not $.grep
<script>
$("#autocompleteInputField").autocomplete({
source: function(request, response) {
var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i");
response($.map(myArray, function(item) {
if (matcher.test(item)) {
return (item)
}
}));
}
});
</script>
Ответ 6
source: function( request, response ) {
var t = jQuery.grep(t, function(a){
var patt = new RegExp("^" + request.term, "i");
return (a.match(patt));
});
response(t);
},