我有一个页面,它被代码所淹没,如:
var textBox = $get("<%=textState.ClientID%>");
这要求我在页面内部使用JavaScript,而不是将其隐藏在js文件中。 有更好的方法吗?
document.getElementById不起作用,因为我最终得到了这样的代码:
var textBox = document.getElementById("originDestinationControl_textState");
或
var textBox = document.getElementById("ctl00_ContentPlaceHolder_originDestinationControl_textState");
取决于我引用这些控件的位置(在母版页和/或用户控件内)
答案 0 :(得分:3)
我通常会将这样的内容粘贴到我想要使用单独的js文件的页面中。
<script type="text/javascript">
var pageNameElements = {
textbox : '<%= textbox.ClientId %>',
button : '<%= button.ClientId %>'
};
</script>
通过这种方式,您可以获得一个很好的javascript对象,其中包含您可以在js文件中使用的所有控件ID。
$('#' + pageNameElements.textbox)
或
document.getElementById(pageNameElements.textbox)
如果你没有使用jquery。
答案 1 :(得分:2)
我可以建议学习jQuery吗?自从我开始使用它以来,我从来没有必须处理凌乱的asp标签来获取页面上的控件。
var textBox = $get("<%=textState.ClientID%>");
看起来像
var textBox = $("input[id$='_textState']");
在jQuery中。更好的是,你可以将它放入它自己的js文件中!
答案 2 :(得分:1)
使用.NET 4.0,您实际上可以完全控制它:
http://www.codeproject.com/KB/aspnet/ASP_NET4_0ClientIDFeature.aspx
它与Visual Studio 2010一起发布了Release Candidate。我知道这不是一个理想的解决方案,但它是一个。
答案 3 :(得分:0)
我认为你被困住了。
您的textState.ClientId代码需要保留在aspx页面本身。这是因为它是客户端。 JavaScript包含文件是从页面的其余部分单独下载的,因此它不知道如何处理它。
如果你需要来清理它,你可以尝试使用经典的asp风格包含文件。但是,在asp.net中,他们最终会添加比他们修复的更多的混乱。