После восстановления списка Bootstrap multiselect не будет иметь значения - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть страница, где пользователь сначала видит большой список элементов, а затем нажимает кнопку, чтобы заменить список деталями для одного элемента. (То есть выберите элемент для редактирования, а затем отредактируйте этот элемент.) В деталях у меня есть несколько применений элемента управления Bootstrap multiselect. В одном случае мне нужно перестроить список элементов в элементе управления на пути к детализации (поскольку пользователь мог добавить элемент в этот список при редактировании предыдущего элемента детализации).

Внутри вызова Ajax для получения и отображения подробной информации у меня есть этот код:

            $('#topic').multiselect('deselectAll',false);
            updateListOfTopics();
            $('#topic').multiselect('select', obj.TopicDesc);
            $('#topic').multiselect('refresh');

Вот код для функции updateListOfTopics:

function updateListOfTopics(){
    var fnargs = "GetTopics|''";
    $.ajax({
        url: 'retrievedata.php',
        type: "POST",
        async:true,
        data: {"functionname":"gettopics", "arguments":fnargs},
        dataType: "JSON",
        success: function (obj) {
                var topicList = $('#topic');
                topicList.empty();
                for (line=0;line<obj.length;line++) {
                    topicList.append($("<option></option>").attr("value", obj[line].Description).attr("id", obj[line].iID).text(obj[line].Description));
                }
                topicList.multiselect('rebuild');
        },
        error: function(xhr, textStatus, errorThrown) {
                success = false;
                console.log(xhr);
                alert("Unable to get list of issues.");
        }
    });     
}

Когда я устанавливаю точку останова и шаг за шагом, я вижу, что элемент управления имеет правильное значение после вызова множественного выбора («обновить») и фактически имеет правильное значение в конце всего вызова Ajax, который включает в себя первый блок кода. Однако раскрывающийся список теряет свое значение до того, как пользователь получает контроль.

Если я закомментирую вызов updateListofTopics, он будет работать как нужно, за исключением, конечно, что данные в раскрывающемся списке не обновляются.

Я подозреваю, что есть тонкость Ajax, которую я пропускаю, в том, что один Ajax-вызов делает другой Ajax-вызов.

...