简体   繁体   English

如何在html select中填充和删除选项

[英]how to populate and remove options in html select

I have four dropdowns and four options, all four dropdowns have same options. 我有四个下拉菜单和四个选项,所有四个下拉菜单具有相同的选项。 I am trying to remove options in other three dropdowns if user selects one option from current dropdown. 如果用户从当前下拉菜单中选择一个选项,我将尝试删除其他三个下拉菜单中的选项。 If user changes again with a new value, new value option should remove and old value should populate again in other dropdowns. 如果用户再次使用新值更改,则应删除新值选项,而旧值应在其他下拉列表中再次填充。 I did something but it is not working as expected. 我做了一些事情,但是没有按预期工作。

Refer to the following jsFiddle(Updated): http://jsfiddle.net/ruq1jb0c/5/ 请参考以下jsFiddle(已更新): http : //jsfiddle.net/ruq1jb0c/5/

 $('.inputcontrol').change(function() { var fields = ['Employee', 'Status', 'State', 'Supervisor']; var value = $(this).val(); $('.inputcontrol').not(this).find('option').each(function() { if ($(this).val() == value) { $(this).remove() } }); $('.inputcontrol').each(function() { for (var i = 0; i < fields.length; i++) { if (fields[i] != value) { if ($(this).find("option[value=" + fields[i] + "]").length == 0) { $(this).append("<option value=" + fields[i] + ">" + fields[i] + "</option>"); } } } }); }); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <select id="field1" class="inputcontrol"> <option value="Employee">Employee</option> <option value="Status">Status</option> <option value="State">State</option> <option value="Supervisor">Supervisor</option> </select> <br><br> <select id="field2" class="inputcontrol"> <option value="Employee">Employee</option> <option value="Status">Status</option> <option value="State">State</option> <option value="Supervisor">Supervisor</option> </select> <br><br> <select id="field3" class="inputcontrol"> <option value="Employee">Employee</option> <option value="Status">Status</option> <option value="State">State</option> <option value="Supervisor">Supervisor</option> </select> <br><br> <select id="field4" class="inputcontrol"> <option value="Employee">Employee</option> <option value="Status">Status</option> <option value="State">State</option> <option value="Supervisor">Supervisor</option> </select> 

Ok, here is an exmaple that will make this much simpler. 好的,这是一个例子,它将使这一过程变得更加简单。 Read the comment to understand how it work 阅读评论以了解其工作原理

 var selectedFields = ['Employee', '', '', ''] // here is all selected Value for each dropdownList is saved var drps = $(".inputcontrol"); function validate(){ drps.each(function(index, item){ $(this).attr("index", index); // This is important where $(this).index() are not working $(this).find("option").show(); // reset all option to visible var v = $(this).val(); $.each(selectedFields, function(subIndex, subItem){ if (index > subIndex) // here we hide all previews selected values $(item).find("option[value='"+subItem+"']").hide(); }); }); } drps.change(function(){ var itemIndex = eval($(this).attr("index")); selectedFields[itemIndex] = $(this).val() drps.each(function(index, item){ // reset all values of dropdown that are after the current dropdown if (index > itemIndex) { $(this).val("none") selectedFields[index] =""; } }); validate(); }); validate(); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <select id="field1" class="inputcontrol"> <option value="Employee">Employee</option> <option value="Status">Status</option> <option value="State">State</option> <option value="Supervisor">Supervisor</option> </select> <br><br> <select id="field2" class="inputcontrol"> <option selected="selected" value="none">none</option> <option value="Employee">Employee</option> <option value="Status">Status</option> <option value="State">State</option> <option value="Supervisor">Supervisor</option> </select> <br><br> <select id="field3" class="inputcontrol"> <option selected="selected" value="none">none</option> <option value="Employee">Employee</option> <option value="Status">Status</option> <option value="State">State</option> <option value="Supervisor">Supervisor</option> </select> <br><br> <select id="field4" class="inputcontrol"> <option selected="selected" value="none">none</option> <option value="Employee">Employee</option> <option value="Status">Status</option> <option value="State">State</option> <option value="Supervisor">Supervisor</option> </select> 

This made a difference: (as in your jsfiddle link) 这有所作为:(如您的jsfiddle链接中所示)

if($(this).val()===value)
        $(this).hide()
 else  $(this).show() // this will unhide previously hidden options 

and not '==' 而不是'=='

see it in jsFiddle jsFiddle中看到它

Try using a class and addClass & removeClass 尝试使用类以及addClassremoveClass

On change find the option which have class hide and add or remove it 在更改时,找到具有类hide和添加或删除选项的选项

 $('.inputcontrol').change(function(e) { $('.inputcontrol').find('option.hide').removeClass('hide'); $('.inputcontrol').not(this).find('option[value="' + e.target.value + '"]').addClass('hide'); }); 
 .hide { display: none; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <select id="field1" class="inputcontrol"> <option value="Employee">Employee</option> <option value="Status">Status</option> <option value="State">State</option> <option value="Supervisor">Supervisor</option> </select> <br><br> <select id="field2" class="inputcontrol"> <option value="Employee">Employee</option> <option value="Status">Status</option> <option value="State">State</option> <option value="Supervisor">Supervisor</option> </select> <br><br> <select id="field3" class="inputcontrol"> <option value="Employee">Employee</option> <option value="Status">Status</option> <option value="State">State</option> <option value="Supervisor">Supervisor</option> </select> <select id="field4" class="inputcontrol"> <option value="Employee">Employee</option> <option value="Status">Status</option> <option value="State">State</option> <option value="Supervisor">Supervisor</option> </select> 

Check code comments 检查代码注释

 $('select').change(function() { // get id to exclude from hiding var id = $(this).attr('id'); // get value select for option hiding reference var val = $(this).val(); // unhide all options $('select option').css('display', 'block'); // loop through all select except the changed one // and hide all options with value from changed select $('select:not(#' + id + ')').each(function() { $(this).find('option[value="' + val + '"]').css('display', 'none'); }); }); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <select id="field1" class="inputcontrol"> <option value="Employee">Employee</option> <option value="Status">Status</option> <option value="State">State</option> <option value="Supervisor">Supervisor</option> </select> <br><br> <select id="field2" class="inputcontrol"> <option value="Employee">Employee</option> <option value="Status">Status</option> <option value="State">State</option> <option value="Supervisor">Supervisor</option> </select> <br><br> <select id="field3" class="inputcontrol"> <option value="Employee">Employee</option> <option value="Status">Status</option> <option value="State">State</option> <option value="Supervisor">Supervisor</option> </select> <br><br> <select id="field4" class="inputcontrol"> <option value="Employee">Employee</option> <option value="Status">Status</option> <option value="State">State</option> <option value="Supervisor">Supervisor</option> </select> 

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

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