Я использую последний виджет автозаполнения, который является частью последнего пользовательского интерфейса Jquery. Мне нужны две вещи: автозаполнение для заполнения текстового поля по мере ввода и способ сопоставления введенных значений со значениями в БД. Кто-нибудь знает, как это сделать с существующим автозаполнением? Спасибо
Функция автозаполнения пользовательского интерфейса JQuery не имеет сопоставления или автозаполнения
Ответы (3)
Отказ от ответственности: это будет работать только в современных браузерах с поддержкой input.setSelectionRange
< /а>. Если вам нужно решение для старых браузеров, вам нужно найти кросс-браузерное решение.
Во всяком случае, вот как я бы подошел к этому:
$(document).ready(function() {
$("#auto").autocomplete({
source: function(request, response) {
/* autofill: */
/* If using AJAX, place your AJAX request here */
var results = $.ui.autocomplete.filter(src, request.term)
, el = this.element[0];
if (results.length) {
el.value = results[0];
/* This will not work < IE9 */
el.setSelectionRange(request.term.length, el.value.length);
}
response(results);
},
change: function (event, ui) {
/* mustmatch: */
if (!ui.item) {
this.value = '';
}
}
});
});
Пример: http://jsfiddle.net/SgxyT/
Как видите, mustmatch
реализовать намного проще. Все, что вам нужно сделать, это вернуть введенное значение, если оно не было выбрано в раскрывающемся списке.
С другой стороны, autofill
потребует от вас использования функции в качестве source
для автозаполнения, определения результатов и установки выбора на входе.
Вы должны написать сценарий на стороне сервера, который строит правильный SQL-запрос и возвращает совпадающие строки в формате JSON, совместимые со спецификацией автозаполнения.
Вы видели эту ссылку http://jqueryui.com/demos/autocomplete/#remote-jsonp< /а> ?
Вы можете указать страницу сервера в качестве источника данных. Он внутренне использует jquery ajax.
$("#txtSearchKey").autocomplete({
source: function (request, response) {
$.ajax({
url: "getcityname.aspx?term=" + $("#txtSearchKey").val(),
dataType: "json",
success: function (data) {
response($.map(data, function (item) {
return { label: item.CityName, value: item.CityId }
}));
}
});
}
});
У вас должна быть страница сервера (в этом примере getcityname.aspx), которая считывает значение строки запроса и выполняет вызов вашей базы данных, чтобы названия городов начинались с того, что вы ввели в текстовое поле с идентификатором "txtSearchKey". Вы можете вернуть ответ с помощью response.write.