2010-02-11 32 views
3

我有一個頁面,它是越來越有這樣的代碼不知所措:拼搶asp.net控制在JavaScript

var textBox = $get("<%=textState.ClientID%>"); 

這需要我有我的JavaScript頁面內,而不是很好藏在一個js文件。 有沒有更好的方法呢?

的document.getElementById不工作,因爲這樣我結束了這樣的代碼:不同的地方,我引用這些控件(母版頁內

var textBox = document.getElementById("originDestinationControl_textState"); 

var textBox = document.getElementById("ctl00_ContentPlaceHolder_originDestinationControl_textState"); 

和/或用戶控件)

回答

3

我通常將這樣的東西粘貼到我想使用單獨的js文件的頁面中。

<script type="text/javascript"> 
    var pageNameElements = { 
     textbox : '<%= textbox.ClientId %>', 
     button : '<%= button.ClientId %>' 
    }; 
</script> 

這樣,你得到所有你可以在你這樣的js文件使用控件ID一個很好的JavaScript對象。

$('#' + pageNameElements.textbox) 

document.getElementById(pageNameElements.textbox) 

,如果你不使用jQuery。

+0

其實這不適合我。我得到null JS文件: var myTextBox = document.getElementById(pageOriginElements。textOriginMultiState); alert(myTextBox); ASCX: <腳本類型= 「文本/ JavaScript的」> 變種pageOriginElements = { textOriginMultiState: '<%= textOriginMultiState.ClientID%>', textOriginMultiStateCountry: '<%= hiddenOriginMultiStateCountry.ClientID%>' }; – Boone

+0

確保JS文件中的函數在創建了包含element-id的對象後執行,即在標記之前添加js文件,或使用jQuery $(document).ready()函數執行當dom準備就緒時。 –

0

我想,你就完蛋了。

您的textState.ClientId代碼需要保留在aspx頁面上。這是因爲它呈現在客戶端。 JavaScript包含文件是從頁面的其餘部分單獨下載的,因此它不知道如何處理它。

如果你需要來清理它,你可以嘗試使用經典的asp風格包含文件。但是,在asp.net中,他們最終添加了比他們修復更多的混亂。

2

可能我建議學習jQuery?自從我開始使用它以來,我從來沒有必須處理亂七八糟的asp標籤以獲取頁面上的控件。

var textBox = $get("<%=textState.ClientID%>"); 

看起來像

var textBox = $("input[id$='_textState']"); 
jQuery中

。甚至更好,你可以把它放在它自己的js文件中!