0

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

我在该控件中使用此 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 无法找到正确的文本框。

我怎样才能解决这个问题?

4

2 回答 2

2

如果您正在使用 .net 4.0:

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

于 2013-04-12T09:18:35.853 回答
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 + "\")");

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

于 2013-04-14T07:21:50.727 回答