Использовать функцию geocomplete после события ajax

У меня есть кнопка, которая добавляет поле ввода, где вы можете ввести адрес. Для адреса я использую плагин geocomplete. Во всех полях ввода, которые не были сгенерированы с помощью ajax, работает геокомплект. Если вход был сгенерирован ajax, это не так.

Это мой код для создания поля ввода:

$('.add-drop').on('click', function(){  
     $.ajax({
         url : '/ajax/get-location-input',
         success : function(data){   
            $('#additional-drop').append(data);
        } 
    }); 
});

Это мой геокомплект код:

$(".get-location").geocomplete({
    details : "form",
    types : ["geocode", "establishment"]
  }).bind("geocode:result", function(event, result){  
      console.log(result);
});

Проблема не в классе. Я пытался сделать что-то вроде $(".get-location").on("geocomplete"... но это не сработало. Любая идея? Спасибо

1 ответ

Решение

AJAX является асинхронным (асинхронный JavaScript и XML). Это означает, что он может выполняться после завершения обработки основного кода.

$.ajax({
    url: '/ajax/get-location-input',
    success:function(data){   
        alert(data);
    } 
});

alert('Hi ');

В этом случае, Hi сначала предупредит, потом data, В вашем случае, входные данные могут даже не генерироваться, и поэтому geolocation код их не увидит

Правильный код:

$.ajax({
    url: '$('#additional-drop').append(data);',
    success:function(data){   
        $('#additional-drop').append(data);

        $(".get-location").geocomplete({
            details: "form",
            types: ["geocode", "establishment"]
        });

    } 
});

Запустит код после того, как данные будут получены с сервера


Это я рекомендовал способ сделать это:

(function () {

    $.fn.addGeolocation = function () { this.geocomplete({ details: "form", types: ["geocode", "establishment"] }).bind("geocode:result", function(e, a){ console.log(a); }); }

    $.get('/ajax/get-location-input', function (a) {
        $('#additional-drop').append(data);

        $(".get-location").addGeolocation();

    });

    /* You may or may not need this */
    window.onload = function () { $(".get-location").addGeolocation(); }

}());
Другие вопросы по тегам