【问题标题】:Disable DropDownList Based On Previous DropDownList Selection根据先前的 DropDownList 选择禁用 DropDownList
【发布时间】:2017-11-06 16:44:42
【问题描述】:

我有两个 ASP.Net 下拉列表,其中的值相同,根据用户输入的不同数据从数据库中填充,并且每次都具有动态大小。我的情况是,我希望禁用第二个下拉列表中已在第一个下拉列表中选择的任何选项。我做了一些谷歌,大多数结果都在<select></select> 上,而不是<asp:DropDownList></asp:DropDownList> 的 ASP.Net 下拉列表

我尝试过遵循 java 脚本并使用 <select></select>,但它也不起作用。

<script>
    $('select').on('change', function () {

        $('select').find('option').prop('disabled', false);

        $('select').each(function () {
            $('select').not(this).find('option[value="' + this.value + '"]').prop('disabled', true);
        });

    });
</script>

按钮代码

protected void AddStudentSubjectB_Click(object sender, EventArgs e)
{
    OnRowDataBoundSubject();
    if(StudentSubjectDDL.Items.Count > 0)
    {
        AddStudentSubjectB.Enabled = false;
        StudentSubjectDDL.Visible = true;
        EnrollStudentSubjectB.Visible = true;
        CancelEnrollStudentSubjectB.Visible = true;
        AddStudentSubjectB1.Visible = true;
    }
}

下拉列表填充代码

private void OnRowDataBoundSubject()
{
    StudentSubjectDDL.DataSource = GetData("SELECT SUB.ID, SUB.NAME FROM SUBJECT SUB LEFT JOIN RESULT RES ON RES.SUBJECT = SUB.ID WHERE RES.SUBJECT IS NULL OR RES.ID != '" + StudentID1.Text.Trim() + "' AND SUB.COURSE = '" + StudentCourse1.Text.Trim() + "';");
    StudentSubjectDDL.DataTextField = "NAME";
    StudentSubjectDDL.DataValueField = "ID";
    StudentSubjectDDL.DataBind();
}

【问题讨论】:

    标签: javascript c# asp.net


    【解决方案1】:

    这是因为范围。

    当你在行中使用“this”时:

    $('select').each(function () {
        $('select').not(this).find('option[value="' + this.value + '"]').prop('disabled', true);
    });
    

    您实际上是指选择本身而不是外部选择,因此您需要将外部选择保存在这样的变量中:

    $('select').on('change', function () {
        var outer = this;
        $('select').find('option').prop('disabled', false);
    
        $('select').each(function () {
            $('select').not(outer).find('option[value="' + outer.value + '"]').prop('disabled', true);
        });
    });
    

    看到这个小提琴:https://jsfiddle.net/nbvsd28z/1/

    编辑:

    我做了这个小提琴,当动态添加下拉菜单时选项被禁用:https://jsfiddle.net/m6wxg8x0/2/

    【讨论】:

    • 嗨。 @Nekura 很抱歉,但代码不起作用。 Testing
    • 嗨@TanYihWei,看起来下拉菜单是通过按下按钮动态添加的,如果是这种情况,上面的代码将不起作用,因为您无法禁用不存在的选项然而。您能否使用此信息更新您的问题并添加显示下拉列表添加方式的代码?
    • 嗨。 @Nekura 我已经更新了这个问题。如果您需要更多信息,请告诉我。非常感谢。
    • 嗨@TanYihWei 我认为在后端而不是javascript 中解决这个问题可能会更好。数据绑定新下拉列表后,从上一个下拉列表中找到选定的值并在新下拉列表中禁用该值。您可以在此处查看如何在后端禁用选项:stackoverflow.com/a/2185923/5908198
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    相关资源
    最近更新 更多