JQuery autocomplete - невозможно установить источник динамически - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь сделать следующее.У меня есть сборщик дат.Когда я выбираю дату (во время события изменения данных), я делаю ajax-вызов, чтобы получить данные, которые мне нужно заполнить, в раскрывающемся списке автозаполнения.Когда страница загружается в первый раз, поле автозаполнения будет пустым.Как и когда дата изменяется или выбирается, поле автозаполнения должно заполняться соответственно.Пожалуйста, проверьте мой код ниже.

Когда я запускаю переменную dataSrc, выпадающий список загружается впервые без каких-либо проблем.Проблема, с которой я сталкиваюсь, связана с динамическим заполнением, данные, которые я получаю из вызова ajax, не устанавливаются в источнике автозаполнения динамически.

Пожалуйста, совет.

    var dataSrc = [];
    $(document).ready(function() {
        $("#dropdownselector").autocomplete({
            source : dataSrc,
            change : function(event, ui) {
                $("#selector").val(0);
                $("#selector").val(ui.item.id);
            }
        }).focus(function() {
            $(this).autocomplete("search", " ");
        });

    $('#dateselector').on("changeDate", function() {
        $.ajax({
            type : "GET",
            url : "../getDropDownData",
            data : {
                "dateSelected" : $('#dataSelected').val()
            },
            contentType : "application/x-www-form-urlencoded; charset=utf-8",
            dataType : "json",
            async : true,
            cache : false,
            success : function(data) {
                dataSrc = JSON.stringify(data);
            },
            error : function(data) {
                alert('There was an error while fetching data.')
            }
        })
    });
    });

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

dataSrc = JSON.stringify(data); заменяет то, на что указывает dataSrc.Он не изменяет исходный элемент массива, который был задан для автозаполнения.

Вы можете попробовать перенести все элементы из данных в dataSrc, что приведет к тому, что массив, на который первоначально указал dataSrc, не изменится,но получите новые значения.

Или, если это не сработает, вам, возможно, придется использовать метод https://api.jqueryui.com/autocomplete/#method-option, чтобы изменить параметр источника для автозаполнения.

$("#dropdownselector").autocomplete( "option", "source", data);
0 голосов
/ 23 мая 2018

Для внутренней функции успеха вам нужно уничтожить старое автозаполнение и перерисовать его.Возможно, вам нужно создать функцию для создания автозаполнения ('drawAutocomplete').

...
success : function(data) 
{
   dataSrc = JSON.stringify(data);

   $( "#dropdownselector" ).autocomplete( "destroy" );
   drawAutocomplete();
},
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...