目前,如果我在SharePoint項目中使用JavaScript,我將代碼添加到* .ascx文件的<script type="text/javascript"></script>
塊中,併爲每個元素創建一個變量爲ClientID
。如何從外部JavaScript的ServerControl中訪問ClientID
例如:
var test = '<%= TextBox1.ClientID %>';
現在我想將一個外部JavaScript添加到我的項目,並插入代碼出現。 但是我怎樣才能訪問ClientID
?在外部JavaScript中,我不能使用<%= TextBox1.ClientID %>
。我發現這個:referencing server controls in external file但我不明白,這應該如何工作。如果有人能夠解釋我的,如何訪問ID,那將是非常棒的。
順便說一句,爲什麼這個:
<script type="text/javascript">
var ClientIDs = {
test1 : '<%= TextBox1.ClientID %>',
test2 : '<%= TextBox2.ClientID %>'
}
function SetButtonStatus() {
alert($(ClientIDs.test1).value);
}
</script>
不起作用,會顯示沒有消息?
格爾茨
編輯1:
好吧,我可以只使用textBox1的在我的外部腳本? 我這樣做了,這是我* .ascx文件:
<script type="text/javascript">
var ClientIDs = {
textBox1: '<%= textBox1.ClientID %>',
textBox2: '<%= textBox2.ClientID %>'
}
</script>
在我的外部腳本我有隻是一個函數來測試它:
function test() {
alert($(ClientIDs.textBox1).val();
}
我也"#" +
進行了測試。每次測試()被執行,我獲得以下錯誤:
"document.getElementById(...)" is null or not an object
編輯2: 我在警報錯過了)
。但是現在我收到一條消息,說明這個變量沒有被定義。 如果我使用:$('#' + ClientIDs.SumbitSearch).val()
我只是得到文本而不是我的控件的ID。
編輯3: 在我使用的那一刻:
<script type="text/javascript">
var ClientIDs = {
test1 : '<%= TextBox1.ClientID %>',
test2 : '<%= TextBox2.ClientID %>'
}
function test() {
alert($('#' + ClientIDs.test1).attr("id")));
}
</script>
在我的* .ascx文件,它的工作原理。我不喜歡這種方式......它不適用於外部JS,引用不起作用。如果有人有其他的想法,這將與.net 3.5一起工作,如果他讓我知道,這將是很好的。
我會避免界定JS在你的ASCX文件瓦爾:頁面可以包括多個控件(或相同控件的多個實例)。如果每個控件定義了「var ClientIDs」,它們將會相互衝突(該死的JS全局命名空間!)。如果你只允許你的.ASPX文件定義JS var,至少你知道每頁只有一個。 – mikemanne
其實我手工定義了JS var。我找到了一個小工具,它自動創建'ClientIDs' [鏈接](http://jagregory.com/writings/how-to-use-clientids-in-javascript-without-the-ugliness/)。但我無法從我的外部JS訪問該變量。格爾茨。 – hofmeister
我不確定你的意思是「手工定義JS var」,以及如果同一個控件定義了相同的var,但是多次包含在頁面中,它將如何防止碰撞。 – mikemanne