简体   繁体   English

使用jQuery过滤下拉列表中的多个值

[英]filter more than one value in dropdown with jquery

I'm doing something that needs to make sure the drop-down value cannot be repeated among the few drop-down. 我正在做一些事情,以确保下拉列表中的下拉列表值不能重复。
Which means once the value has selected shouldn't appear again inside the rest drop down 这意味着一旦选择了值,其余下拉列表中就不会再出现

Now I face the problem with when I click the first drop down, the value in the second drop down won't apper(this is what I want), it looks nice and works well. 现在我遇到的问题是,当我单击第一个下拉列表时,第二个下拉列表中的值将无法显示(这就是我想要的),它看起来不错并且运行良好。 But when I select the second dropdown, the third drop down will show the value what I have been selected in its drop-down(This is not what I want). 但是,当我选择第二个下拉菜单时,第三个下拉菜单将显示在其下拉菜单中选择的值(这不是我想要的值)。

 $('#ext1').on('change', function () { if ($(this).data('options') == undefined) { $(this).data('options', $('#ext2 option').clone()); } var val = $(this).val(); var options = $(this).data('options').filter('[value!=\\"' + val + '\\"]'); $('#ext2').html(options); $('#ext2').val('0'); }); $('#ext2').on('change', function () { if ($(this).data('options') == undefined) { $(this).data('options', $('#ext3 option').clone()); } var val = $(this).val(); var options = $(this).data('options').filter('[value!=\\"' + val + '\\"]'); $('#ext3').html(options); $('#ext3').val('0'); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="dext1"> <label> Extra Vas 1:</label> <select name="ext1" id="ext1" ng-model="FormData.Phases"> <option name="vas" selected value="0"> -- NO EXTRA VAS -- </option> <option name="vas" value="1"> VAS 1 </option> <option name="vas" value="2"> VAS 2 </option> <option name="vas" value="3"> VAS 3 </option> </select> </div> <br/> <div id="dext1"> <label> Extra Vas 2:</label> <select name="ext2" id="ext2" ng-model="FormData.Phases"> <option name="vas2" selected value="0"> -- NO EXTRA VAS -- </option> <option name="vas2" value="1"> VAS 1 </option> <option name="vas2" value="2"> VAS 2 </option> <option name="vas2" value="3"> VAS 3 </option> </select> </div> <br/> <div id="dext1"> <label> Extra Vas 3:</label> <select name="ext3" id="ext3" ng-model="FormData.Phases"> <option name="vas3" selected value="0"> -- NO EXTRA VAS -- </option> <option name="vas3" value="1"> VAS 1 </option> <option name="vas3" value="2"> VAS 2 </option> <option name="vas3" value="3"> VAS 3 </option> </select> </div> 

Just change the line under $('#ext2').on('change', function () 只需更改$('#ext2').on('change', function ()

from: 从:

var options = $(this).data('options').filter('[value!=\"' + val + '\"]');

to: 至:

var options = $(this).data('options').filter('[value!=\"' + val + '\"]').filter('[value!=\"' + $('#ext1').val() + '\"]');

I have include multiple filters to filter out selected value from 1st select box. 我包括多个过滤器,用于从第一个选择框中过滤出所选值。

 $('#ext1').on('change', function () { if ($(this).data('options') == undefined) { $(this).data('options', $('#ext2 option').clone()); } var val = $(this).val(); var options = $(this).data('options').filter('[value!=\\"' + val + '\\"]'); $('#ext2').html(options); $('#ext2').val('0'); }); $('#ext2').on('change', function () { if ($(this).data('options') == undefined) { $(this).data('options', $('#ext3 option').clone()); } var val = $(this).val(); var options = $(this).data('options').filter('[value!=\\"' + val + '\\"]').filter('[value!=\\"' + $('#ext1').val() + '\\"]'); $('#ext3').html(options); $('#ext3').val('0'); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <div id="dext1"> <label> Extra Vas 1:</label> <select name="ext1" id="ext1" ng-model="FormData.Phases"> <option name="vas" selected value="0"> -- NO EXTRA VAS -- </option> <option name="vas" value="1"> VAS 1 </option> <option name="vas" value="2"> VAS 2 </option> <option name="vas" value="3"> VAS 3 </option> </select> </div> <br/> <div id="dext1"> <label> Extra Vas 2:</label> <select name="ext2" id="ext2" ng-model="FormData.Phases"> <option name="vas2" selected value="0"> -- NO EXTRA VAS -- </option> <option name="vas2" value="1"> VAS 1 </option> <option name="vas2" value="2"> VAS 2 </option> <option name="vas2" value="3"> VAS 3 </option> </select> </div> <br/> <div id="dext1"> <label> Extra Vas 3:</label> <select name="ext3" id="ext3" ng-model="FormData.Phases"> <option name="vas3" selected value="0"> -- NO EXTRA VAS -- </option> <option name="vas3" value="1"> VAS 1 </option> <option name="vas3" value="2"> VAS 2 </option> <option name="vas3" value="3"> VAS 3 </option> </select> </div> 

You can also use the disabled state of the options if you want to increase the count of selectboxes. 如果要增加选择框的数量,也可以使用选项的禁用状态。 Here's a modified version of yours: 这是您的修改后的版本:

 $("select[name^='ext']").on("change", function() { var selectedValues = []; $("select[name^='ext']").each(function() { if ($(this).val() !== "0") selectedValues.push($(this).val()); }); $("select[name^='ext'] option:not(:selected)").each(function() { if (selectedValues.indexOf($(this).attr("value")) >= 0) { $(this).attr("disabled", "disabled"); } else { $(this).attr("disabled", false); } }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="dext1"> <label> Extra Vas 1:</label> <select name="ext1" id="ext1" ng-model="FormData.Phases"> <option name="vas" selected value="0"> -- NO EXTRA VAS -- </option> <option name="vas" value="1"> VAS 1 </option> <option name="vas" value="2"> VAS 2 </option> <option name="vas" value="3"> VAS 3 </option> </select> </div> <br/> <div id="dext2"> <label> Extra Vas 2:</label> <select name="ext2" id="ext2" ng-model="FormData.Phases"> <option name="vas2" selected value="0"> -- NO EXTRA VAS -- </option> <option name="vas2" value="1"> VAS 1 </option> <option name="vas2" value="2"> VAS 2 </option> <option name="vas2" value="3"> VAS 3 </option> </select> </div> <br/> <div id="dext3"> <label> Extra Vas 3:</label> <select name="ext3" id="ext3" ng-model="FormData.Phases"> <option name="vas3" selected value="0"> -- NO EXTRA VAS -- </option> <option name="vas3" value="1"> VAS 1 </option> <option name="vas3" value="2"> VAS 2 </option> <option name="vas3" value="3"> VAS 3 </option> </select> </div> 

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

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