在许多论坛上看来,这似乎是解决方案,然而,它似乎对我不起作用:
function update() {
alert("hello world");
var test = document.getElementById("<%=InCL.ClientID%>").value;
alert(test);
}
和asp / html是:
<asp:TextBox ID="InCL" runat="server" Text="" value="" onchange="update()"></asp:TextBox>
似乎我错过了一些简单的东西?我还尝试使用单引号&lt;%= InCL.ClientID%&gt;
警告“hello world”会在更改时弹出,但不会用于测试......
使用asp.net 3.5,FF,母版等......
感谢。
修改
所以我把它更改为使用this.value并且有效,但仍然没有解决方法如何通过id获取它?
工作:
<asp:TextBox ID="InCL" runat="server" Text="" value="1" onchange="update(this.value)"></asp:TextBox>
with:
function update(x) {
alert(x);
}
答案 0 :(得分:3)
这不起作用的原因是JavaScript位于外部js文件中,该文件不通过处理管道并且是从磁盘静态提供的。服务器端标记&lt;%= InCL.ClientID%&gt;需要通过处理管道来呈现服务器控件的id字符串。
解决此问题的最简单方法是将脚本元素放在页面中。其他方法是仅定义页面中具有服务器标记的JavaScript并分配给全局变量。然后在全局变量声明和赋值之后定义外部脚本 - 然后可以在外部脚本文件中使用此变量。
答案 1 :(得分:1)
您的问题是您的JavaScript文件是外部的,因此它无法查看或了解当前HTML页面与服务器之间的布线。
这可能是你最好的选择
在页面上声明文字控件:
<asp:Literal id="variables" runat="server" />
将其设置为客户端ID:
variables.Text = string.Format("var myclientid='{0}';", Incl.ClientID);
然后您可以从外部JS文件访问它:
document.getElementById(myclientid);
HTH
答案 2 :(得分:1)
为什么不简单地传递“this”而不是“this.value”? (显然在实际代码中没有引号。)如果你传递了实际的字段对象,你可以导出id,值,任何父母,祖父母或兄弟姐妹在旧的DOM社区附近 - 你可以得到一个可重复使用的块可以在任何地方删除的代码,而无需对id值进行硬编码。 (即使代码只在这一个表单中使用过,当您决定对表单进行大修时会发生什么?)