在克隆到新的动态生成的下拉列表后,删除先前选择中的选定项
本文关键字:选择 删除 下拉列表 动态 | 更新日期: 2023-09-27 18:03:48
我有一个asp.net下拉列表和一个asp.net按钮控件。每次单击按钮时,应该生成一个新的下拉列表,其中包含除了先前选择的值之外的所有值。
例如:如果我从值{a,b,c}的列表中选择'a',然后单击按钮,我应该得到一个值{b,c}的新下拉列表。
虽然,我能够克隆下拉列表值,但我不知道如何通过删除选中的值来过滤值。
编辑
下面是场景- 我开始只有一个下拉列表(有5个选项)=> 1,2,3,4,5 ->第一个选项是默认选中的。
- i选择选项5(在选择列表#2)
- 我点击克隆->新列表(#3)添加只有选项2,3,4
- i选择选项2(在选择列表#3)
- 我点击克隆->新列表(#4)创建选项3,4
- . .
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="ddlCityName" runat="server" class="ddlClone" DataTextField="City" DataValueField="City" CssClass=""></asp:DropDownList>
<asp:Button ID="btnClone" runat="server" Text="Clone" />
</div>
<div id="container">
</div>
</form>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
$("[id*=btnClone]").bind("click", function () {
var index = $("#container select").length + 1;
var ddl = $("[id$=ddlCityName]").clone();
ddl.attr("id", "ddlCityName_" + index);
ddl.attr("name", "ddlCityName_" + index);
$("#container").append(ddl);
$("#container").append("<br /><br />");
return false;
});
});
</script>
您可以获取选定的值,并在克隆后将其从新的select中删除,如下所示:
$(ddl).find("option[value='"+selVal+"']").remove();
下面是一个jsFiddle运行的例子:https://jsfiddle.net/ntvo173q/
我更新了jsFiddle以删除所有以前选择的项目,只是检查:
我所做的就是获取所有选中的值并从new select中移除:
var ddl = $('#sel').clone();
$('select').each(function() {
$(ddl).find("option[value='"+$(this).val()+"']").remove();
});
https://jsfiddle.net/ntvo173q/1/解决方案如下:
<script type="text/javascript">
$('#btnClone').click(function () {
var original = $('select.ddlClone(0)');
var allSelects = $('select.ddlClone');
var clone = original.clone();
$('option', clone).filter(function (i) {
return allSelects.find('option:selected[value="' + $(this).val() + '"]').length;
}).remove();
$('#target').append(clone).append('<br /><br /><br />');
});