2009-11-13 16 views
0

這是我的SharePoint編輯表單: 我需要能夠使用我的JavaScript的asp.net文本框:地理解JavaScript的getElementById找到在SharePoint形式asp.net控制

<asp:TextBox runat="server" id="ff17{''}" text="{@Container_x0020_Qty}" __designer:bind="{ddwrt:DataBind('u',concat('ff17',''),'Text','TextChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Container_x0020_Qty')}" /> 

我想在我的javascript讀它是這樣:

var CCID = document.getElementById("ff17"); 

這不工作...

但是,如果我複製的內容頁面呈現的形式的ID:

var CCID = document.getElementById("ctl00_m_g_64200ded_b593_468b_bca5_0ea023581b8a_ff17"); 

This Works!

有沒有一種方法可以讓我的工作無需總是找出ct部分?

回答

0

我不確定sharepoint和綁定是如何工作的。但在ASP.net中,你會做這樣的事情。

var CCID = document.getElementById('<%= ff17.ClientID %>'); 

我不確定這會起作用,但它可能會指向正確的方向。

2

我不知道這將如何轉化到SharePoint,但對於正常的asp.net頁面通常我把這樣的腳本中頭部,以獲得客戶端ID:

<head runat="server"> 
    <script type="text/javascript" language="javascript">   
     //ClientIDs for controls in naming containers that we'll want to use from javascript 
     var Controls = { 
      'ff17':<%="'" + ff17.ClientID%>', 
       'othercontrol':<%="'" + othercontrol.ClientID%>'}; 
    </script> 
</head> 

我之所以因素是這樣做是爲了避免需要在任何我想要使用它的地方重新呈現id,並且因爲我可以從包含的腳本文件中引用它,而無需通過asp.net處理器傳遞它們。控件對象是爲了避免命名衝突(只有一個擔心的名字)。

缺點是最初報價的醜陋字符串連接,因爲簡單的'<%=o.clientid%>'語法在這裏不起作用。另外,對於主頁面而言,這種方式並不適用,其中頭部位於主頁面中,但您關心的控件位於詳細信息頁面中。但是,您當然可以在您的頁面的其他位置執行此操作。

+0

+1這比在正常的JavaScript代碼的其餘部分整理'<%= %>'要好。使Javascript的主體完全靜止。 – AnthonyWJones 2009-11-13 20:14:24

+0

我永遠不會得到這個在Sharepoint中工作不幸:( – Alarius 2009-11-24 20:40:54