Я хочу сделать автокомпиляцию каждого текстового поля, используя текстовое поле attr "kolonadi"
Затем вам нужно сделать селектором jQuery , который соответствует этому атрибуту:
$('input[type="text"][kolonadi!=""]').each(function() {
// ...
});
... когда я нажимаю клавишу в текстовом поле, страница предупреждает меня о "вводе с клавиатуры", но автокомпиляция не работает. Если я нажму еще одну клавишу, она запустится!
Проблема заключается в том, что метод jQuery UI .autocomplete
не сразу вызывает раскрывающийся список, как вы думаете. Если вы вызываете его один раз, оно постоянно преобразует поле ввода в поле автозаполнения.
Итак, ваш код проверяет нажатие клавиш, и если он его находит, он превращает текстовое поле в автозаполнение. Затем при втором нажатии клавиши обработчик автозаполнения запускает и , запускается ваш обработчик, и он снова преобразуется в автозаполнение снова .
Просто вызовите .autocomplete
непосредственно при загрузке страницы, избавьтесь от обработчика keydown
и сделайте это. Вам не нужен ваш собственный обработчик нажатия клавиш, потому что метод .autocomplete
вставит свой собственный обработчик нажатия клавиш.
Примерно так:
var textEntry2 = $('.textEntry2');
var kolonadi_ = textEntry2.attr("kolonadi");
textEntry2.autocomplete({
source: function(request, response) {
$.ajax({
url: '<%=ResolveUrl("~/AutoCom.asmx/GetValues") %>',
data: "{ 'word': '" + request.term + "','KullaniciIndexInGlob':'<%=KullaniciIndexInGlob %>','BaslikId':'<% =BaslikId %>','columnName':'" + kolonadi_ + "'}",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
success: function(data) {
response($.map(data.d, function(item) {
return {
label: item.split('-')[0],
val: item.split('-')[1]
}
}))
},
error: function(response) {
alert(response.responseText);
},
failure: function(response) {
alert(response.responseText);
}
});
},
select: function(e, i) {
$("#<%=hfCustomerId.ClientID %>").val(i.item.val);
},
minLength: 1
});