简体   繁体   English

在价值变化时隐藏Select2 Optgroup

[英]Hiding Select2 Optgroup on Change of Value

I have 2 optgroup in my select list and i am trying to show one optgroup and hide other on selection of vehicle. 我的选择列表中有2个optgroup,我正尝试显示一个optgroup并在选择车辆时隐藏其他optgroup。

 jQuery(document).ready(function() { jQuery('select').each(function() { jQuery(this).select2(); }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/js/bootstrap.min.js"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2.min.css" rel="stylesheet"/> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2-bootstrap.css" rel="stylesheet"/> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2.min.js"></script> <select id="vehicle" name="vehicle"> <option value="car">Car</option> <option value="bike">Bike</option> </select> <select id="car" name="car"> <optgroup label="Bike"> <option value="001">Kawasaki</option> <option value="002">Suzuki</option> </optgroup> <optgroup label="Car"> <option value="c001">Mclaren</option> <option value="c002">Ferrari</option> </optgroup> </select> 

All i want is, when i select "car" , it hides optgroup of "bike", and when i select "bike" , it hides optgroup of "car", is it possible ? 我想要的是,当我选择“ car”时,它会隐藏“ bike”的optgroup,而当我选择“ bike”时,它会隐藏“ car”的optgroup,这可能吗?

Thanks 谢谢

It might be better (and slightly more user friendly) if you just disable the options instead of removing them. 如果只禁用这些选项而不是删除它们,则可能会更好(并且对用户更友好)。 This is also natively supported by Select2, so the user will not be able to select an option that is disabled. Select2本身也支持此功能,因此用户将无法选择已禁用的选项。

 jQuery(document).ready(function() { jQuery('select').each(function() { jQuery(this).select2(); }); jQuery('#vehicle').on('change', function() { if ($(this).val() == 'car') { $('#car-bike option').prop('disabled', true); $('#car-car option').prop('disabled', false); } else { $('#car-bike option').prop('disabled', false); $('#car-car option').prop('disabled', true); } // Tell Select2 to update the current selection // Some browsers (correctly) switch the selected option if it is disabled // Others don't, which is unfortunate $('#car').trigger('change'); }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/js/bootstrap.min.js"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2.min.css" rel="stylesheet"/> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2-bootstrap.css" rel="stylesheet"/> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2.min.js"></script> <select id="vehicle" name="vehicle"> <option value="car">Car</option> <option value="bike">Bike</option> </select> <select id="car" name="car"> <optgroup id="car-bike" label="Bike"> <option value="001">Kawasaki</option> <option value="002">Suzuki</option> </optgroup> <optgroup id="car-car" label="Car"> <option value="c001">Mclaren</option> <option value="c002">Ferrari</option> </optgroup> </select> 

I created a hack for hiding disabled optgroups: 我创建了一个用于隐藏禁用的optgroup的黑客:

$.initialize(".select2-results__option[role='group']", function(index, optionGroup)
    {
        let optGroupName = $(this).attr("aria-label");

        let select2ResultsId =$(this).closest("ul.select2-results__options").attr("id");

        if(select2ResultsId)
        {
            let ptrn = /^select2-([\w]+)-results/i;
            let res =ptrn.exec(select2ResultsId);

            if(res.length > 0)
            {
                let relSelect2Id = res[1];

                let relOptGroup= $("#" + relSelect2Id).find("optgroup[label='" +optGroupName +  "'][disabled]");

                if (relOptGroup.length)
                {
                    $(optionGroup).attr("disabled", "disabled");
                    $(optionGroup).attr("aria-disabled", "true");
                }
            }
        }
    });

Css: CSS:

.select2-results__option[aria-disabled=true],
.select2-results__option[disabled]
{display:none}

$.initialize is jquery plugin: https://github.com/pietrasiak/jquery.initialize $ .initialize是jquery插件: https : //github.com/pietrasiak/jquery.initialize

**Related optgroup in select must have attribute disabled ** ** select中的相关optgroup必须禁用属性**

You could try listening for the value of the option selected and manipulate the results based on that, like for example: 您可以尝试侦听所选选项的值,并根据该值处理结果,例如:

 jQuery(document).ready(function() { jQuery('select').each(function() { jQuery(this).select2(); $('#vehicle').change(function(){ if($(this).val() == 'car'){ $('#bike').remove(); } }); }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/js/bootstrap.min.js"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2.min.css" rel="stylesheet"/> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2-bootstrap.css" rel="stylesheet"/> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2.min.js"></script> <select id="vehicle" name="vehicle"> <option value="car">Car</option> <option value="bike" selected>Bike</option> </select> <select id="car" name="car"> <optgroup id="bike" label="Bike"> <option value="001">Kawasaki</option> <option value="002">Suzuki</option> </optgroup> <optgroup label="Car"> <option value="c001">Mclaren</option> <option value="c002">Ferrari</option> </optgroup> </select> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM