[英]Grabbing asp.net controls in javascript
我有一個頁面,它被代碼所淹沒,如:
var textBox = $get("<%=textState.ClientID%>");
這需要我在頁面內部使用我的JavaScript而不是很好地隱藏在js文件中。 有更好的方法嗎?
document.getElementById不起作用,因為我最終得到這樣的代碼:
var textBox = document.getElementById("originDestinationControl_textState");
要么
var textBox = document.getElementById("ctl00_ContentPlaceHolder_originDestinationControl_textState");
取決於我引用這些控件的位置(在母版頁和/或用戶控件內)
我通常會將這樣的東西粘貼到我想要使用單獨的js文件的頁面中。
<script type="text/javascript">
var pageNameElements = {
textbox : '<%= textbox.ClientId %>',
button : '<%= button.ClientId %>'
};
</script>
通過這種方式,您可以獲得一個很好的javascript對象,其中包含您可以在js文件中使用的所有控件ID。
$('#' + pageNameElements.textbox)
要么
document.getElementById(pageNameElements.textbox)
如果你不使用jquery。
我可以建議學習jQuery嗎? 自從我開始使用它以來,我從來沒有必須處理凌亂的asp標簽來獲取頁面上的控件。
var textBox = $get("<%=textState.ClientID%>");
看起來像
var textBox = $("input[id$='_textState']");
在jQuery中。 更好的是,你可以將它放入它自己的js文件中!
使用.NET 4.0,您實際上可以完全控制它:
http://www.codeproject.com/KB/aspnet/ASP_NET4_0ClientIDFeature.aspx
它與Visual Studio 2010一起發布了Release Candidate。我知道這不是一個理想的解決方案,但它是一個。
我覺得你被卡住了。
您的textState.ClientId代碼需要保留在aspx頁面本身。 這是因為它是客戶端。 JavaScript包含文件是從頁面的其余部分單獨下載的,因此它不知道如何處理它。
如果你需要清理它,你可以嘗試使用經典的asp風格包含文件。 然而,在asp.net中,他們最終添加了比他們修復的更多的混亂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.