这适用于我的Sharepoint编辑表单: 我需要能够在我的javascript中使用asp.net TextBox:
<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");
这有效!
有没有办法让我可以在不必总是找出ct部分的情况下使用它?
答案 0 :(得分: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处理器传递它们。 Controls对象是为了避免命名冲突(只需要担心一个名称)。
缺点是初始引用的丑陋字符串连接,因为更简单的'<%=o.clientid%>'
语法在这里不起作用。此外,这对母版页也不起作用,其中头部位于母版页中,但您关注的控件位于详细信息页面中。但你可以在页面的其他地方做到这一点。
答案 1 :(得分:0)
我不确定sharepoint和bindings是如何工作的。但是在ASP.net中你会做这样的事情。
var CCID = document.getElementById('<%= ff17.ClientID %>');
我不确定这会起作用,但它可能会指向正确的方向。