2013-04-12 92 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