0

我正在尝试启动一个旧的 ASP 经典项目并将其作为 ASP.NET webfroms 解决方案运行,但在让 javascript 连接到 ASP 控件时遇到问题。这是 .aspx 代码:

<asp:TextBox id="groupOwner2" CssClass="textbox" Runat="server" Enabled="False" TextMode="SingleLine"></asp:TextBox>

应该操纵它的 javascript 看起来像这样,并试图清除文本框:

function OnChange() {
// clear existing data

document.getElementById('<%=groupOwner2.ClientID%>').value = "";}

最初,javascript 控件引用如下所示:

document.Form1.elements["groupOwner2"]

这也不起作用(不足为奇)。我在这些方面尝试了多种变体,但没有任何效果,当触发脚本时,我只收到“JavaScript 运行时错误:无法设置未定义或空引用的属性‘值’”。作为记录,脚本是由另一个控件触发的,这就是文本框 ASP 代码中未提及 onChange() 函数的原因。

任何输入将不胜感激!

4

3 回答 3

4

从您的最新评论来看,问题在于代码:

document.getElementById('<%=groupOwner2.ClientID%>').value = "";

包含在一个.js文件中,该文件(默认情况下)不由 ASP.NET 引擎处理。即使是这样,它也无法解析客户端 ID,因为它是一个完全独立的 HTTP 请求。

有两种解决方案:

1)在页面中创建一个全局变量.ASPX,例如:

<script>
var GROUP_OWNER_ID = '<%=groupOwner2.ClientID%>';
</script>

然后,在您的.js文件中,您可以执行以下操作:

document.getElementById(GROUP_OWNER_ID).value = "";

2)在网页控件上使用静态ID:

<asp:TextBox id="groupOwner2" CssClass="textbox" Runat="server" Enabled="False" TextMode="SingleLine" ClientIDMode="Static"></asp:TextBox>

注意ClientIDMode属性。这将导致 ID始终不变groupOwner2。然后,您可以使用:

document.getElementById('groupOwner2').value = "";
于 2013-03-15T22:38:26.680 回答
0

使用 ClientIDMode="Static" 您可以将页面指令或具体放在您正在使用的控件上。

然后下面的代码完美运行。document.getElementById('controlID');

然后 controlID 始终保持不变。您不需要使用 clientid。

于 2014-08-22T21:08:37.940 回答
0

尝试...

'<%= Page.[yourpage].FindControl("ContentPlaceHolder1").FindControl("groupOwner2").ClientID %>'
于 2013-03-15T21:43:41.793 回答