我想知道如何维护在Javascript中修改过的控件状态
我在C#ASP.net 2010 Express中有两个TextBox,一个DropDownList和一个按钮(所有Runat = Server)。
第一个文本框只接受用户输入的任何数据。
第二个文本框启用状态将根据DDL选择的值进行更改。
如果ddl选择的值为“ - ”,则第二个文本框将变为Enabled = False。
如果不是“ - ”,它将变为Enabled = True。这个启用是通过Javascript完成的。
在我的页面加载事件中,我有以下代码。
if (!IsPostBack)
{
txtKey2.Text = "";
txtKey2.BackColor = System.Drawing.ColorTranslator.FromHtml("#CCCCCC");
txtKey2.Enabled = false;
}
在我的aspx页面中,我有一些javascript可以清除文本框数据并禁用文本框。
这是第二个文本框。
<asp:TextBox ID="txtKey2" runat="server" Width="425px" EnableViewState="False"></asp:TextBox>
这是DDL。
<asp:DropDownList ID="selKey1" runat="server" onchange="EnableSelkey(this.value,1)">
<asp:ListItem Value="0">-</asp:ListItem>
<asp:ListItem Value="1">AND</asp:ListItem>
<asp:ListItem Value="2">OR</asp:ListItem>
</asp:DropDownList>
这是我的Javascript的代码。 (我有一个计划实现其他文本框和ddl所以在我的代码中,如果有条件,我还有其他的。)
function EnableSelkey(val, strID) {
var txtBox;
if (strID == "1")
txtBox = document.getElementById('<%= txtKey2.ClientID %>');
else if (strID == "2")
txtBox = document.getElementById('<%= txtKey3.ClientID %>');
else
txtBox = document.getElementById('<%= txtKey4.ClientID %>');
if (val != 0) {
txtBox.disabled = false;
txtBox.style.backgroundColor = "White";
txtBox.value = "";
txtBox.select();
}
else {
txtBox.disabled = true;
txtBox.style.backgroundColor = "#CCCCCC";
txtBox.value = "";
}
}
按钮点击事件中没有任何内容。
通过使用上面的所有代码,当我运行项目时,页面加载确定。 第二个启用文本框的状态设置为False(通过Page_Load事件)。到目前为止确定。
然后从我的浏览器中,我选择ddl值而不是“ - ”,文本框因为javascript而变为启用状态。这是好的。
我输入值并单击按钮。页面PostBack发生在这里。文本框仍然启用(因为我的文本框的EnableViewState = False)。
我选择ddl值为“ - ”,第二个文本框变为禁用状态。
点击按钮,页面回发发生,但这次文本框仍然启用。 &LT;&LT;这是我试图解决的问题。我将EnableViewState,ViewStateMode更改为不同的值但仍然相同。
这个有解决方案吗?
这是我的测试图片网址。
State 1,
State 2,
State 3
很抱歉这篇长篇文章。
答案 0 :(得分:2)
我尝试过,除了使用额外的HiddenField控件外,没有找到任何解决方案。
我在Javascript中更新文本框的状态时更新隐藏字段值。 在我的页面加载事件中,我检查了所有隐藏的字段值,并根据隐藏字段值,我将禁用/启用我的文本框,这对我来说不是一个好的解决方案。
想象一下,我的表单上有10个或15个文本框,我需要有10或15个隐藏字段才能维护客户端操作结果。
目前,这是我唯一的解决方案。
我不确定这可以视为'答案'所以我还没有关闭这个问题。
答案 1 :(得分:0)
<asp:DropDownList ID="selKey1" runat="server" onchange="EnableSelkey(this.value,1)">
<asp:ListItem Value="0">-</asp:ListItem>
<asp:ListItem Value="1">AND</asp:ListItem>
<asp:ListItem Value="2">OR</asp:ListItem>
</asp:DropDownList>
function EnableSelkey(val, strID) {
var txtBox;
if (strID == "1")
txtBox = document.getElementById('<%= txtKey2.ClientID %>');
else if (strID == "2")
txtBox = document.getElementById('<%= txtKey3.ClientID %>');
else
txtBox = document.getElementById('<%= txtKey4.ClientID %>');
if (val != 0) {
txtBox.disabled = false;
txtBox.style.backgroundColor = "White";
txtBox.value = "";
txtBox.select();
}
else {
txtBox.disabled = true;
txtBox.style.backgroundColor = "#CCCCCC";
txtBox.value = "";
}
}
你必须在每次回发时给你调用javascript函数。
if (!IsPostBack)
{
txtKey2.Text = "";
txtKey2.BackColor = System.Drawing.ColorTranslator.FromHtml("#CCCCCC");
txtKey2.Enabled = false;
}
ScriptManager.RegisterClientScriptBlock(this, typeof(System.Web.UI.Page), "MyJSFunction", "EnableSelkey("+selKey1.SelectedValue+",1);", true);
它可以帮到你,让我知道以获得进一步的帮助。
答案 2 :(得分:0)
我发现一个有效的解决方案是将我放在!IsPostBack部分中的代码放在页面加载事件中直接启用和禁用文本框。