@sunjs

Не срабатывает автокоплит при генерации поля средствами JS?

Приветствую всех!

Я только начинаю осваивать JS, и не могу понять уже вторые сутки, почему не срабатывает автокомплит подстановки адресов, если поле генерируется на js.

Есть форма с <input name"adres[0]" value"" />

И ссылка <a onclick="copyAddress();">Добавить адрес</a> добавляющая такое же поле, и если добавить поле нажав на эту ссылку, то не срабатывает для добавленного поля автокоплит, но если в html разметить тег поля без генерации на js <input name"adres[1]" value"" />, то во всех полях всё нормально отрабатывает.

Причём индексы в названиях полей генерируются правильные.

С чем может быть это связано?
Помогите, пожалуйста, знатоки, мои познания JS пока на уровне обезьяны)
Вторые сутки не могу понять в чем причина и остановился на этом моменте(

Весь код html:
<html>
<head>
<title>Автокоплит</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/smoothness/jquery-ui.css" />
<script src="http://api-maps.yandex.ru/2.0-stable/?load=package.full&lang=ru-RU" type="text/javascript"></script>
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script src="http://code.jquery.com/ui/1.9.1/jquery-ui.min.js"></script>
<script src="autocomplete.js"></script>
</head>
<body>
 
<div class=adres>
 
<div class=row_adres>
Адрес: <input id=0 name="adress[0]" type="text" value="" />
</div>
 
</div>
 
<br />
<br />
<a onclick="copyAddress();">Добавить адрес</a>
 
</body>
</html>


Код autocomplete.js:
var search_result = [];
 
 
$(document).ready(function()
{
    
$('.adres').each(function(i, el)
{
    var adress          = $(el).find('[name^=adress]');
    
    adress.keyup(function(){
 
        var search_query = $(this).val();
        
        search_result = [];
        $.getJSON('http://geocode-maps.yandex.ru/1.x/?format=json&callback=?&geocode='+search_query, function(data) 
        {           
            
            for(var i = 0; i < data.response.GeoObjectCollection.featureMember.length; i++) 
            {               
                search_result.push
                ({
                label: data.response.GeoObjectCollection.featureMember[i].GeoObject.description+' - '+data.response.GeoObjectCollection.featureMember[i].GeoObject.name,
                value: data.response.GeoObjectCollection.featureMember[i].GeoObject.name.replace('undefined', ''),
                longlat:data.response.GeoObjectCollection.featureMember[i].GeoObject.Point.pos
                });
            }
            
            //подключаем к текстовому полю виджет autocomplete
            adress.autocomplete({
                source: search_result,
                select: function(event, ui){}
            });
        });
    });
 
    $.ui.autocomplete.filter = function (array, term) {
        return $.grep(array, function (value) {
            
            return value.label || value.value || value;
        });
    };
    
}); 
    
 
});
 
 
//копирования поля для дополнительного адреса
window.copyAddress = function() 
{
    var $firstAddress   = $('.row_adres:first');
    var $lastAddress    = $('.row_adres:last');
    var $clone      = $firstAddress.clone();
    var $remove = $('<div class=""/>');
 
    $clone.find('div').prepend($remove);        
    $clone.find('input').val('');
    $lastAddress.after($clone);
        
    setTimeout(function() 
    {
        updateAddressIndex();
    }, 0);
};
 
//обновление индексов
function updateAddressIndex() 
{
    $('.row_adres').each(function(i, el) 
    {
        var $this = $(el);
        $this.find('[name^=adress]').attr('name',   'adress[' + i + ']');
    });
}
  • Вопрос задан
  • 286 просмотров
Пригласить эксперта
Ответы на вопрос 2
@sunjs Автор вопроса
Возможно есть более правильная реализация этой штуки? Потому что даже если всё будет отрабатывать правильно, кажется мне, что
$('.adres').each(function(i, el)
{
... обращение к геосерверу
}


не правильный подход, так как сколько полей будет на странице, столько же и одинаковых запросов к геосерверу, а это лишние нагрузки, понять бы как обратиться к тому полю, в котором вводится адрес без использования цикла, пробовал так
var adress          = $(this).find('[name^=adress]');
и убирал цикл, но не срабатывает тоже(
Ответ написан
@cd2005
php разработчик
Код $('.adres').each(function(i, el) отработал при загрузке страницы и к новым элементам нужно заново цеплять обработчик.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы