Я пытаюсь создать раскрывающийся список с множественным выбором, используя файлы javascript и css начальной загрузки. К сожалению, мой динамически созданный набор параметров (с использованием AJAX), похоже, не заполняет список.
Я знаю, что это должно быть связано с функцией множественного выбора, потому что, когда я настроил его как раскрывающийся список с одним выбором, он отлично работает.
Интересно, связано ли это с тем, когда вызывается эта функция. Список вызывается не тогда, когда документ готов, а после успешного вызова ajax.
Вот код:
function Participants(sid){
console.info(sid);
$('#participants').empty()
$('#participants').append("<option>Loading......</option>");
$.ajax({
method:"POST",
url:"participants_dropdown.php?sid = "+sid,
contentType:"application/json; charset=utf-8",
dataType:"json",
success: function(data){
console.info('success')
$('#participants').empty();
$('#participants').append("<option value='0'>---Select Participants---</option>");
$.each(data, function(i, item){
$('#participants').append('<option value = "'+data[i].facility_id+'">Call-Sign: '+data[i].call_sign+' - Operator: '+data[i].operator+' - Primary Programming: '+data[i].primary_programming+'</option>');
});
},
complete: function(){
}
});
$('#participants').multiselect('destroy');
$('#participants').multiselect();
}<link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.15/css/bootstrap-multiselect.css">
<script src = "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.15/js/bootstrap-multiselect.js"></script>
<div class = "col-md-4">
<h3><span>2) Select Market Participants</span></h3>
<select id = "participants" multiple class = "form-control">
</select>
</div>
<!---sample JSON
[{"operator":"Nexstar Media Group Inc","owner":"Mission Broadcasting Inc","call_sign":"KRBC-TV","facility_id":"306","primary_programming":"NBC"},{"operator":"Nexstar Media Group Inc","owner":"Nexstar Media Group Inc","call_sign":"KTAB-TV","facility_id":"59988","primary_programming":"CBS"},{"operator":"Prime Time Christian Broadcasting Incorporated","owner":"Prime Time Christian Broadcasting Incorporated","call_sign":"KPCB-DT","facility_id":"77452","primary_programming":"REL"},{"operator":"Sinclair Broadcast Group Inc","owner":"Sinclair Broadcast Group Inc","call_sign":"KTXS-TV","facility_id":"308","primary_programming":"ABC"},{"operator":"TEGNA Inc","owner":"TEGNA Inc","call_sign":"KXVA","facility_id":"62293","primary_programming":"FOX"}]--->Любое руководство будет оценено. Я пробовал различные решения, предложенные в подобных сообщениях, но не повезло.
Вот что я получаю (для первых двух): 0: call_sign: "KRBC-TV" service_id: "306" оператор: "Nexstar Media Group Inc" владелец: "Mission Broadcasting Inc" primary_programming: "NBC" прото: Объект 1 : call_sign: "KTAB-TV" id объекта: "59988" оператор: "Nexstar Media Group Inc" владелец: "Nexstar Media Group Inc" primary_programming: "CBS" прото: Object "Как я уже сказал, я могу успешно заполнить один раскрывающийся список, так что может быть что-то с тем, как работает множественный выбор.
Пожалуйста, преобразуйте строку: console.info(JSON.stringify(data));
К исходному вопросу добавлен ответ json



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В вашей функции участников у вас есть вызов ajax. Поскольку это асинхронный вызов, вам нужно переместить уничтожение и создать выбор из нескольких вариантов внутри фрагмента успеха:
function Participants(sid){
console.info(sid);
$('#participants').empty()
$('#participants').append("<option>Loading......</option>");
$.ajax({
method:"POST",
url:"participants_dropdown.php?sid = "+sid,
contentType:"application/json; charset=utf-8",
dataType:"json",
success: function(data){
console.info('success')
$('#participants').multiselect('destroy');
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ HERE
$('#participants').empty();
$('#participants').append("<option value='0'>---Select Participants---</option>");
$.each(data, function(i, item){
$('#participants').append('<option value = "'+data[i].facility_id+'">Call-Sign: '+data[i].call_sign+' - Operator: '+data[i].operator+' - Primary Programming: '+data[i].primary_programming+'</option>');
});
$('#participants').multiselect();
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ HERE
},
complete: function(){
}
});
}
Фрагмент (кнопка имитирует вызов ajax):
$('#participants').empty()
$('#participants').append("<option>Loading......</option>");
$('#participants').multiselect();
$('#btn').on('click', function(e) {
var data = [{"operator":"Nexstar Media Group Inc","owner":"Mission Broadcasting Inc","call_sign":"KRBC-TV","facility_id":"306","primary_programming":"NBC"},{"operator":"Nexstar Media Group Inc","owner":"Nexstar Media Group Inc","call_sign":"KTAB-TV","facility_id":"59988","primary_programming":"CBS"},{"operator":"Prime Time Christian Broadcasting Incorporated","owner":"Prime Time Christian Broadcasting Incorporated","call_sign":"KPCB-DT","facility_id":"77452","primary_programming":"REL"},{"operator":"Sinclair Broadcast Group Inc","owner":"Sinclair Broadcast Group Inc","call_sign":"KTXS-TV","facility_id":"308","primary_programming":"ABC"},{"operator":"TEGNA Inc","owner":"TEGNA Inc","call_sign":"KXVA","facility_id":"62293","primary_programming":"FOX"}];
$('#participants').multiselect('destroy');
$('#participants').empty();
$('#participants').append("<option value='0'>---Select Participants---</option>");
$.each(data, function(i, item){
$('#participants').append('<option value = "'+data[i].facility_id+'">Call-Sign: '+data[i].call_sign+' - Operator: '+data[i].operator+' - Primary Programming: '+data[i].primary_programming+'</option>');
});
$('#participants').multiselect();
})<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel = "stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src = "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.15/css/bootstrap-multiselect.css">
<script src = "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.15/js/bootstrap-multiselect.js"></script>
<div class = "col-md-4">
<h3><span>2) Select Market Participants</span></h3>
<select id = "participants" multiple class = "form-control">
</select>
<button id = "btn" class = "btn btn-primary">Click Me</button>
</div>Большое спасибо, что нашли время ответить. К сожалению, он по-прежнему не работает даже после вставки двух строк множественного выбора в предлагаемые места. Что более странно, так это то, что я скопировал код вашего примера (с кнопкой ниже), и даже это не сработало.... хотя когда я запускаю фрагмент на этой странице, он отлично работает. Есть предположения?
Что также интересно, так это то, что мой пустой раскрывающийся список не отображается так же, как ваш. Он отображается как пустое поле, а слово «Нет выбранных» не появляется. Может ли это быть связано с другими загрузочными файлами, которые я мог загрузить на свой сервер?
Взгляните на библиотеки, которые я использовал во фрагменте
Догадаться. Во-первых, в вашем коде мне нужно было переместить javascript, вызывающий кнопку, под самой кнопкой. В моем коде после внесения ваших исходных изменений (которые решили мою первоначальную проблему) мне также пришлось включить библиотеку popper и загрузить ее перед bootstrap.min.js. Большое спасибо за вашу помощь.
можете ли вы добавить значение, полученное при успехе ajax: console.info(data)?