JQuery автозаполнение не работает, если генерировать из AJAX - PullRequest
3 голосов
/ 16 февраля 2012

Автозаполнение, оно работает отлично, как и ожидалось, если использовать обычную статическую html / php страницу.

Но я работаю над модулем, который динамически загружает (AJAX) генерирует тот же HTML, что и выше, в область.Я не могу заставить автозаполнение работать.

Есть идеи, как мне решить эту проблему?Я искал везде и пробовал все, но, очевидно, еще не верное решение.

//
// this is the ajax code load dynamic contents in a #display_area
// from onclick=selected_purchase()
//

    function selected_purchase() {
      var fields = $(":input").serialize();
        $.ajax({ 
        url: "purchase4",
        type: "POST",
        dataType: "html",
        data: fields ,
        beforesend: function(a) {
            // before send process here
            showBusy();
        },
        success: function(html) {
            // success process here ...
            processForm(html);

        }   
    });

      }


//
// this is the autocomplete code  
//

$( "#supplier" ).autocomplete({ //the recipient text field with id #supplier
        source: function( request, response ) {
            $.ajax({
                url: "search_supplier",
                dataType: "json",
                data: request,
                success: function(data){
                    if(data.response == 'true') {
                       response(data.message);
                    }
                }
            });
        },
        minLength: 2,
        select: function( event, ui ) {
            // Do something extra on select...
                // add user id to hidden input    

            $('input[name="name"]').val(ui.item.value);
            $('input[name="sl"]').val(ui.item.sl_id);
            return false;
        },

    });

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Вам, вероятно, придется инициализировать экземпляр плагина после загрузки контента.

$("#container").load('some url', function() {
    $(this).find('#autocomplete').autocomplete();
});

Этот код может немного отличаться в зависимости от метода загрузки контента ($ .ajax, .load() ...).Обычной вещью является инициализация вашего плагина в обратном вызове, выполняемом после завершения асинхронного запроса, обычно называемого обратным вызовом «success».


Теперь у нас есть примеры кода, вот что вы должны сделать:1007 *

function selected_purchase() {
    var fields = $(":input").serialize();
    $.ajax({
        ...
        success: function(html) {
            // success process here ...
            processForm(html);

            // assuming "processForm" append the "html" to the DOM
            // you can now call autocomplete
            $( "#supplier" ).autocomplete({
                ...
            });
        }
    });
}​
0 голосов
/ 16 февраля 2012

Ваш Php-скрипт (наверное) отправляет JSon? Это обычная проблема, ваш аутстрим должен выглядеть как

['toto','titi','tata']

Вы можете использовать echo json_encode($myArrayWithStringValues) для того же результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...