У меня есть два выпадающих списка выбора Select2, у которых есть родительские дочерние отношения.Первый раскрывающийся список состоит из стран, а второй - из городов.Оба раскрывающихся списка при начальной загрузке заполняются с помощью Razor.
<div class="col-md-3">
<div class="row">
<div class="col-md-4 right">
@Html.LabelFor(m => Model.Countries) :
</div>
<div class="col-md-8">
@Html.DropDownList("Countries", Model.CountriesList, new { @class = "form-control", multiple = "multiple" })
</div>
</div>
</div>
<div class="col-md-3">
<div class="row">
<div class="col-md-4 right">
@Html.LabelFor(m => Model.City) :
</div>
<div class="col-md-8">
@Html.ListBox("city", Model.CityList, new { @class = "form-control", multiple = "multiple" })
</div>
</div>
</div>
$('#Countries').select2({
placeholder: "Select Country..."
});
$('#city').select2({
placeholder: "Select City..."
});
Эта часть работает нормально.Теперь по выбору выпадающих стран, я должен заполнить города соответственно.Поскольку страны и города являются статическими данными, я не хочу использовать AJAX и постоянные серверные вызовы для этого.
const countrycitylist = {
"Australia": [
{ id: "syd", text: "Sydney" }, { id: "mlb", text: "Melbourne" }
],
"Cannada": [
{ id: "tor", text: "Toronto" }, { id: "mon", text: "Montreal" }
],
"Newzealand" : [
{ id: "auk", text: "Auckland" }, { id: "wel", text: "Welington" }
]
};
$("#Countries").on("change", function () {
var country = $(this).val(); // Selected values are Australia and Cannada
var lstCity = [];
if (country != null || country != undefined) {
if (country.length > 1) {
$("#city").select2("destroy");
for (var key in countrycitylist ) {
if (country.includes(key)) {
lstCity = lstCity.concat(countrycitylist [key])
}
}
$('#city').select2({
data: lstCity
});
}
}
else {
return;
}
});
Так что в основном я пытаюсь добавить в lstcity все пары ключ-значение и сделать их едиными.список, чтобы заполнить раскрывающийся список.
Значение lstCity на консоли равно
0:{id: "syd", text: "Sydney"}
1:{id: "mlb", text: "Melbourne"}
2:{id: "tor", text: "Toronto"}
3:{id: "mon", text: "Montreal"}
length:4
__proto__:Object
Но выпадающий список select2 по-прежнему сохраняет свое первоначальное значение от начальной загрузки, и нет никаких изменений, несмотря на то, что я вручную уничтожил и перестроил его.