2013-04-12 28 views
0

我有一个asp页面,我在其中动态添加了我创建的控件(多次)。在该控件中,我有用于密码和用户名以及还原按钮的文本框。在动态添加的控件中通过id查找元素

我在控制使用JavaScript代码和失败:

function HandlePasswordChanged() { 
    document.getElementById("<%=btnRevert.ClientID %>").disabled = false; 
} 
function HandleUserChanged() { 
    document.getElementById("<%=btnRevert.ClientID %>").disabled = false; 
    document.getElementById("<%=txtPassword.ClientID %>").disabled = false; 
} 
function btnRevertClick() { 
    document.getElementById("<%=btnRevert.ClientID %>").disabled = true; 
    document.getElementById("<%=txtPassword.ClientID %>").disabled = true; 
    document.getElementById("<%=txtUsername.ClientID %>").value = document.getElementById("<%=systemAccount.ClientID %>").value; 
    document.getElementById("<%=txtPassword.ClientID %>").value = ""; 
} 

它的作用是,当我按下一个控制它禁用其他控制文本框中的恢复按钮 - getelement无法找到正确的一个。

我该如何解决这个问题?

+0

考虑张贴呈现的html –

回答

0

我设法找到解决方案。

问题是,每次我用javascript代码添加acsx控件时,它都会添加具有相同名称的多个函数,但内部是不同的。当一个控制想要调用它的“自己”功能时,它只是使用了第一个控件,因为它们都被命名为相同。

我的解决办法是改变此功能:

function HandleUserChanged() { 
    document.getElementById("<%=btnRevert.ClientID %>").disabled = false; 
    document.getElementById("<%=txtPassword.ClientID %>").disabled = false; 
} 

这样:

function HandleUserChanged(btnRevertId, txtPasswordId, cellPasswordId) { 
    document.getElementById(btnRevertId).disabled = false; 
    document.getElementById(txtPasswordId).disabled = false; 
} 

,然后在C#代码我补充一点:

txtUsername.Attributes.Add("onchange", "HandleUserChanged(\"" + btnRevert.ClientID + "\", \"" + txtPassword.ClientID + "\", \"" + cellPassword.ClientID + "\")"); 

这样每个控件都确切地知道哪些控件属于他并将正确的参数发送给函数。

1

如果您正在使用.NET 4.0:

您可以设置ClientIDMode="Static"您的动态添加控件。此外,您必须确保您为控件设置了唯一的ID。

+0

我添加的控件是一个我创建的acsx,并且在其中我有带有静态ID的文本框,所以当我添加这个ACSx的倍数时,我没有用于文本框内部的唯一ID。 – EitanT