【问题标题】:Remove selected items in the previous selections after cloning into a new dynamically generated dropdownlist克隆到新的动态生成的下拉列表后删除先前选择中的选定项目
【发布时间】:2015-07-23 02:51:53
【问题描述】:

我有一个 asp.net 下拉列表和一个 asp.net 按钮控件。每次单击按钮时,都会生成一个新的下拉列表,其中包含除先前选择的值之外的所有值。

例如:如果我从值 {a,b,c} 的列表中选择“a”,然后单击按钮,我应该得到一个新的下拉列表,其中包含值 {b,c}。

虽然,我可以克隆下拉列表值,但我不知道如何通过删除选定的值来过滤值。

编辑

这是场景

  • 我一开始只有 1 个下拉列表(有 5 个选项)=> 1,2,3,4,5 -> 默认选择第一个选项。
  • 我选择选项 5(在选择列表 #2 中)
  • 我点击克隆 -> 新列表 (#3) 仅添加选项 2、3、4
  • 我选择选项 2(在选择列表 #3 中)
  • 我点击克隆 -> 使用选项 3,4 创建新列表 (#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>

【问题讨论】:

    标签: javascript c# jquery asp.net


    【解决方案1】:

    你可以获取选中的值,并在克隆后将其从新的选择中移除,如下所示:

    $(ddl).find("option[value='"+selVal+"']").remove();
    

    这是一个运行示例的 jsFiddle:https://jsfiddle.net/ntvo173q/

    我更新了 jsFiddle 以删除所有以前选择的项目,请查看:

    我所做的是获取所有选定的值并从新选择中删除:

    var ddl = $('#sel').clone();
        $('select').each(function() {
            $(ddl).find("option[value='"+$(this).val()+"']").remove();
    
        });
    

    https://jsfiddle.net/ntvo173q/1/

    【讨论】:

    • 实际上,我错过了通知生成的所有其他下拉列表必须具有相同的属性。例如:如果 Dropdownlist1 有 &lt;option value='1'&gt;Option 1&lt;/option&gt; &lt;option value='2'&gt;Option 2&lt;/option&gt; &lt;option value='3'&gt;Option 3&lt;/option&gt;
    • 我不明白,这不正是 jsfiddle 示例的作用吗?
    • 谢谢@Ricardo,虽然我能够删除选定的选项,但是当我选择第一个下拉列表时我能够做到这一点。我已经编辑了这个问题。
    • 我知道了,所以对于每个新选择,您只想添加以前选择中未选择的选项,对吗?
    • 我用一个新的 jsFiddle 更新了我的回复,它可以满足您的需求,请查看并告诉我是否回答了您的问题。
    【解决方案2】:

    解决办法如下:

    <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 />');
    });
    

    【讨论】:

      猜你喜欢
      • 2019-09-16
      • 2016-10-28
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      • 2013-03-01
      • 2016-02-13
      相关资源
      最近更新 更多