Здравствуйте. У меня такая проблема:
Есть инпут с автокомплитом улиц и проверкой введенного адреса.
Адрес можно ввести вручную или выбрать из автокомплита улицу и дописать вручную только номер дома. Список улиц автокомплита появляется начиная со второй введенной буквы адреса.
По событию change из поля забирается введенный адрес, проверяется на корректность. Если существует несколько аналогичных адресов или не найден точно такой же как введен в поле, то пользователю показывается окошко со списком возможных адресов и предлагается выбрать из списка.
Так вот, если пользователь выбирает улицу из автокомплита кликом мыши, то фокус у инпута пропадает и сразу срабатывает проверка введенного адреса. Т.е. даже не успевает подставиться улица из автокомплита, а сразу происходит проверка первых введенных букв, не говоря о том, что нет возможности дописать номер дома.
При этом если улицу выбрать не кликом, а перемещаясь по списку улиц стрелками и нажатием далее клавиши tab или enter, то все в порядке - улица подставляется в инпут, далее можно спокойно дописать номер дома, потом перейти в другой инпут и только после этого срабатывает проверка адреса.
Как сохранить фокус на инпуте, если был клик на списке автокомплита, т.е. чтобы событие change не сработало раньше чем введен полный адрес так же как если улицу выбирать клавишами?
Вот основной код, автокомплит подключаю плагином jquery.autocomplete.js
$("#adress1, #adress2").live("change",function (){
var me = $(this);
var coord = $("#"+me.attr('id').replace('Adress','Coords'));
coordField.val(''); // очищаем значение поля от старых координат
if ($.trim(me.val())!='') { // если в поле для адресов что то есть
$.get('/geocoder',{adr: me.val()}, function (response){
if(response.state=='ok')
{
coordField.val(response.coords); // кладём в скрытое поле координаты
}
else if (response.state=='many') { // если получили массив адресов
ask(response.coords,coordField, me.val(),me);
}
else { // если координаты не вернулись
showErrDialog(me.val());
me.nextAll("input[type='hidden']").val('');
}
},'json');
}
});