javascript - 使用jquery过滤下拉列表中的多个值

标签 javascript jquery dropdown

我正在做一些需要确保下拉值不能在少数下拉列表中重复的事情。
这意味着一旦选择了该值,就不应再次出现在其余下拉列表中< br/>
现在我面临的问题是,当我单击第一个下拉菜单时,第二个下拉菜单中的值不会出现(这就是我想要的),它看起来不错并且运行良好。但是当我选择第二个下拉菜单时,第三个下拉菜单将显示我在其下拉菜单中选择的值(这不是我想要的)。

$('#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>

最佳答案

只需更改 $('#ext2').on('change', function ()

下的行

来自:

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

到:

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

我已经包含多个过滤器以从第一个选择框中过滤掉选定的值。

$('#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>

关于javascript - 使用jquery过滤下拉列表中的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47174067/

相关文章:

javascript - 下载多个文件和 zip - Chrome 扩展

javascript - 窗口加载未显示正确的其他消息

javascript - 在 JavaScript 或 jQuery 中构建数据数组

java - 任何 Java 支持类似于 Foobar2000 的脚本语言语法 :Title Formatting Reference

javascript - 我可以在 .on ('keyup' 上放置一个计时器来减少更新次数吗?

javascript - 如何访问 JavaScript 正则表达式中的匹配组?

JavaScript - 单击未定义数量的元素以切换多个元素

asp.net - 将 Razor 页面上的下拉列表绑定(bind)到数据库表

javascript - 需要有关 Javascript 下拉菜单的帮助

javascript - 为什么我的菜单没有下拉菜单?