我有两个具有相同值的ASP.Net下拉列表,这些下拉列表根据用户输入的不同数据从数据库中填充,并且每次具有动态大小。我的情况是我希望禁用第二个下拉列表中已经在第一个下拉列表中选择的任何选项。我做了一些Google,大多数结果都在<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();
}
最佳答案
这是因为范围。
在行中使用“ 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/
关于javascript - 根据先前的DropDownList选择禁用DropDownList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47141802/