Как скрыть select2 с настройками jQuery - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть форма выбора с опциями для поиска по ключевым словам. Я использую select2 lib . Но моя форма выбора создается динамически, и я хочу скрыть и показать некоторую форму выбора в зависимости от выбора пользователя. Теперь проблема в том, что, если я выберу что-то из списка:

enter image description here

Например, Завод по производству , он появится новым выберите форму , в которой у меня есть варианты. (работает хорошо)

Если я снова зайду на Производственные ресурсы и выберу другой тип:

enter image description here

Теперь я выбрал Сегмент производства , а предыдущая форма выбора скрыта, но в случае, если я захочу вернуться на Завод , он не появится:

enter image description here

Мой код:

$("#productionResources").change(function () {
    var prodRes = $("#productionResources :selected").html();
   $("#selectedProdRes").html(prodRes);
    var id = $(this).val();
    if (id != "") {
        $('#' + id).select2().next().show();
    } 
    idChanging(id);

});

function idChanging(id) {
    $("#productionResources").change(function () {
        $('#' + id).select2().next().hide();
    });
}

HTML:

<div class="display-in-row">
        <label>Production resources</label><br>
        <select class="form-control" id="productionResources">
            <option selected></option>
            <option value="productionPlant">Production plant</option>
            <option value="productionSegment">Production segment</option>
            <option value="valueStream">Value stream</option>
            <option value="workCenterGroup">Work center group</option>
            <option value="workCenter">Work center</option>
            <option value="station">Station"</option>
        </select>
    </div>
    <div class="display-in-row">
        <div class="col-12">
            <label id="selectedProdRes"></label><br>
            <select asp-for="ProductionPlantId" asp-items="Model.ProductionPlant" class="form-control content" id="productionPlant"></select>
            <select asp-for="ProductionSegmentId" asp-items="Model.ProductionSegment" class="form-control content" id="productionSegment"></select>
            <select asp-for="ValueStreamId" asp-items="Model.ValueStream" class="form-control content" id="valueStream"></select>
            <select asp-for="WorkCenterGroupId" asp-items="Model.WorkCenterGroup" class="form-control content" id="workCenterGroup"></select>
            <select asp-for="WorkCenterId" asp-items="Model.WorkCenter" class="form-control content" id="workCenter"></select>
            <select asp-for="StationId" asp-items="Model.Station" class="form-control content" id="station"></select>
        </div>
    </div>

1 Ответ

1 голос
/ 05 ноября 2019

Проблема связана с вашей функцией idChanging():

Как только вы меняете 1-й выбор, событие idChanging() устанавливается и остается. Таким образом, каждый раз, когда вы выбираете #productionResources, все события, определенные idChanging(), будут запускаться, поэтому все ранее выбранные варианты выбора будут скрыты.

Должно работать следующее:

Я добавляюкласс secondary-select для всех вторичных отборов для облегчения, но это не обязательно:

<div class="display-in-row">
        <div class="col-12">
            <label id="selectedProdRes"></label><br>
            <select asp-for="ProductionPlantId" asp-items="Model.ProductionPlant" class="form-control content secondary-select" id="productionPlant"></select>
            <select asp-for="ProductionSegmentId" asp-items="Model.ProductionSegment" class="form-control content secondary-select" id="productionSegment"></select>
            <select asp-for="ValueStreamId" asp-items="Model.ValueStream" class="form-control content secondary-select" id="valueStream"></select>
            <select asp-for="WorkCenterGroupId" asp-items="Model.WorkCenterGroup" class="form-control content secondary-select" id="workCenterGroup"></select>
            <select asp-for="WorkCenterId" asp-items="Model.WorkCenter" class="form-control content secondary-select" id="workCenter"></select>
            <select asp-for="StationId" asp-items="Model.Station" class="form-control content secondary-select" id="station"></select>
        </div>
    </div>
$("#productionResources").change(function () {
    // Define title
    var prodRes = $("#productionResources :selected").html();
    $("#selectedProdRes").html(prodRes);
    // Make sure none of the 2nd select is visible
    $('.secondary-select').select2().next().hide();
    // Display the select according to the ID
    var id = $(this).val();
    if (id !== '') {
        $('#' + id).select2().next().show();
    } 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...