我有 2 个这样的多选框
<div class="form-group mb-3">
<p class="mb-1 font-weight-bold text-muted mt-3 mt-md-0">Addons</p>
<p class="text-muted font-13">Select multiple Addons</p>
<select class="form-control select2-multiple" id="multi-select-add-ons" data-toggle="select2"
multiple="multiple" data-placeholder="Choose ..." style="width: 100%;">
<optgroup label="Select addons..">
@foreach ($addons as $a)
<option value="{{$a->id}}">{{ $a->name }}</option>
@endforeach
</optgroup>
</select>
<div class="form-group">
<input id="resultAddons" type="hidden" name="addons_id">
</div>
</div>
<div class="form-group mb-3">
<label for="simpleinput">SubAddons</label>
<select name="" id="subAddons" class="form-control select2-multiple" data-toggle="select2" multiple="multiple" data-placeholder="Choose ..." style="width: 100%;">
<optgroup label="Select subaddons..">
<option value="0"></option>
</optgroup>
</select>
<div class="form-group">
<input id="resultSubAddons" type="hidden" name="sub_addons_id">
</div>
</div>
好的,所以我在脚本部分使用以下代码从 Api 获取数据
<script>
$('select').change(function () {
var addons = $("#multi-select-add-ons").val();
//console.log(addons);
$('#subAddons').find('option').not(':first').remove();
addons.map(item => getSubAddonsByAddon(item)) //call subaddons by addon id api
addons = addons.join(", ");
document.getElementById('resultAddons').value = addons;
});
function getSubAddonsByAddon(id) {
let baseUrl = 'http://localhost.test/add-ons/'
var xhr = new XMLHttpRequest();
xhr.open("GET", `${baseUrl}show/${id}/sub-add-ons`, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function() { // Call a function when the state changes.
if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
let data = JSON.parse(this.response);
let complexArr = [data][0].data;
complexArr.forEach(element => {
// console.log(element.name);
getSubAddonIdAndName(element);
});
}
}
xhr.send();
}
let subAddonID, name;
function getSubAddonIdAndName(data) {
this.subAddonID = data.id;
this.name = data.name;
$("#subAddons").append($('<option>', {
value: data.id ,
text: data.name
}));
}
</script>
这是它的外观,代码工作正常,第二个选择(子插件)下拉列表根据插件的选择进行更新,名称如何不显示在选择框文本字段内
从第二个选择框中选择一个值后,该值不像第一个选择框值那样显示
它回到“选择...”而不是像第一个框那样显示名称

