我希望能夠在JavaScript函數中獲得ASP.NET控件的ClientID。我也希望能夠傳入包含控件名稱的var,以便不同的控件可以使用相同的函數。如何使用JavaScript變量在JavaScript函數中獲取ASP.NET ClientID?
例如,如果我想用一個名爲Button1控制,這工作得很好:
function doStuffToButton1Control()
{
var buttonControl = document.getElementById('<%= Button1.ClientID %>');
//do stuff with buttonControl
}
,但我得到一個錯誤,當我試圖讓控件名稱動態。我想串起來ClientID的調用,就像這樣:
function doStuffToGenericControl(controlName)
{
var dynamicControl = document.getElementById('<%= ' + controlName + '.ClientID %>');
//do stuff with dynamicContorl
}
我創建的字符串時使用雙引號或單引號試過,但錯誤總是「在字符串文字字符太多」或「字符文字中的字符太多」。控件存在且名稱正確傳遞(經alert(name)
測試)。
有沒有更好的方法去解決這個問題,還是我錯過了明顯的東西?
謝謝!
更新:此功能將在母版頁上。任何數量的子頁面都會調用它。例如,一個孩子頁面可能有一個調用它像這樣的ASP控制:
<asp:LinkButton ID="Button2" runat="server" OnClientClick="doStuffToGenericControl('Button2')">...</asp:LinkButton>
但另一個頁面可能有這樣的ASP控制也稱之爲:
<asp:LinkButton ID="Button4" runat="server" OnClientClick="doStuffToGenericControl('Button4')">...</asp:LinkButton>
然而,這些控件的ID的經常由ASP.NET在渲染上進行更改,所以它們最終看起來像例如MainContent_Button2
而不是僅僅Button2
。爲了解決這個問題,我通常只使用<%= Button1.ClientID %>
,但是因爲我想讓任何數量的控件能夠使用這個函數,所以我遇到了一些麻煩。
更新2:我能夠使用this
以及getAttribute
調用來獲得我所需要的。 (顯然,這隻會工作,當你指的是控制你點擊了一個,但是這是我所需要的),像這樣:
function doStuffToGenericControl(controlName)
{
var controlID = controlName.getAttribute('id');
var control = document.getElementById(controlID);
//do stuff with control
}
請提供更多的代碼,這種方法是如何被調用?你想傳遞給這個方法的是什麼論點? –
一旦加載頁面,任何服務器端的C#代碼就完成了。任何服務器端的'<%%>'東西都被解析爲javascript函數的純文本(假設它實際上吐出了一些東西)。是否有理由不知道控制客戶端的實際ID? – Snuffleupagus
請參閱上面的更新。謝謝! – rownage