我在数据库中填充了2个下拉列表: 我想要的是在页面加载时禁用第二个,当第一个的值==“1”时。
这是我的第二个下拉列表:
<asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True"
DataSourceID="SqlDataSource2" DataTextField="BName" DataValueField="BId"
OnDataBound="DownList2_DataBound"
OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged">
</asp:DropDownList>
这是我试图禁用dropdownlist2(javascript):
<script type="text/javascript">
window.onload = function () {
document.getElementById('DropDownList2').disabled = true;
}
</script>
在C#代码中尝试了另一件事:
protected void Page_Load(object sender, EventArgs e)
{
if (DropDownList1.SelectedValue.ToString() == "1")
{
DropDownList2.Enabled = false;
}
}
我甚至在page_load中单独尝试过这个:
DropDownList2.Enabled = false;
问题是它在selectIndexChanged上为dropdownlist1禁用,但在页面加载时没有!我的代码中缺少什么东西吗?
答案 0 :(得分:2)
页面加载上的DropDownList1.SelectedValue
可能不等于“1”,因为我猜你会以某种方式对其进行数据绑定,这会在之后生效。
尝试为DropDownList1添加SelectedIndexChanged函数,并在此处显示/启用DropDownList2。您可以将Enabled="False"
放入DropDownList2的标记中,以确保它从禁用状态开始。
答案 1 :(得分:1)
问题可能是document.getElementById('DropDownList2')
找不到您的下拉列表。列表的ID
是服务器端值,不一定转换为客户端ID。如果您将控件的ClientIDMode
设置为Static
,则客户端ID将为DropDownList2
。另一种选择是在输出JavaScript时访问控件的ClientID
属性(如果它是内联的):
document.getElementById('<%=DropDownList2.ClientID%>').disabled = true;
所有这一切,即使是这样,最好以Enabled="False"
开头,因为@aaroncatlin建议所以你不必等待JavaScript在禁用之前执行。
答案 2 :(得分:1)
此语句允许您将dropdown2设置为在页面加载时禁用。
$('#' + '<%=DropDownList2.ClientID%>').attr('disabled',true);
您可以使用Jquery执行此操作,如下所示:
$(document).ready(function () {
var isPostBack = '<%=IsPostBack%>';
if (isPostBack == 'False' || $('#' + '<%=DropDownList1.ClientID%>').val() == '1') {
//This statement allow you to set the dropdown2 to disable
$('#' + '<%=DropDownList2.ClientID%>').attr('disabled', true);
}
else {
$('#' + '<%=DropDownList2.ClientID%>').attr('disabled', false);
}
$('#' + '<%=DropDownList1.ClientID%>').on("change", function () {
//Your code here
if ($('#' + '<%=DropDownList1.ClientID%>').val() == '1') {
$('#' + '<%=DropDownList2.ClientID%>').attr('disabled', true);
}
else {
$('#' + '<%=DropDownList2.ClientID%>').attr('disabled', false);
}
});
});
答案 3 :(得分:1)
在ASP.NET中,生成的ID与组件上的asp ID不同,要从您需要使用的Javascript访问元素&lt;%= DropDownList2.ClientID%&gt;相应的javascript将是这样的:
document.getElementById(<%=DropDownList2.ClientID%>).disabled = true;
答案 4 :(得分:0)
DropDownList的默认选择索引为-1,选定值为空值。我通常会检查选定的索引,而不是按值。例如,
if(DropDownList1.SelectedIndex < 1){
// assuming that index 0 holds your value of "1"
DropDownList2.Enabled = false;
}
并且@Jacob正确指出您需要为JavaScript函数获取正确的ClientID。