[英]How to access the ClientID from a ServerControl in an external JavaScript
目前,如果我在SharePoint項目中使用JavaScript,我會將代碼添加到* .ascx文件中,在<script type="text/javascript"></script>
塊中為每個元素創建一個變量ClientID
。
例如:
var test = '<%= TextBox1.ClientID %>';
現在,我想在項目中添加一個外部JavaScript並在其中插入代碼。 但是如何訪問ClientID
? 在外部JavaScript中,我不能使用<%= TextBox1.ClientID %>
。 我發現了這一點: 在外部文件中引用服務器控件,但我不明白這應該如何工作。 如果有人可以解釋我的信息,那將是很棒的事情。
順便說一句,為什么這樣:
<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();
}
我還用"#" +
對其進行了測試。 每次執行test()時,都會出現以下錯誤:
"document.getElementById(...)" is null or not an object
編輯2:我在警報中錯過了a )
。 但現在我收到一條消息,說明變量沒有定義。 如果我使用: $('#' + ClientIDs.SumbitSearch).val()
我只得到Text而不是我的控件的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,如果他讓我知道,那將是件好事。
要解釋和簡化您要鏈接的問題,他們所做的只是從頁面/服務器控件設置JavaScript變量,並從外部JavaScript文件中讀取該變量。
例如,您的* .ascx文件將包含以下JavaScript:
var textBox1 = '<%= TextBox1.ClientID %>';
然后,您的外部JavaScript文件只能引用變量textBox1
。
現在,還有其他方法可以實現這一目標。 如果您使用的是ASP.NET 4,則可以使用新屬性ClientIDMode來阻止ASP.NET更改您的ID。 如果你不使用ASP.NET 4,也可以簡單地將CSS類添加到你想要選擇的元素,只需更改你的jQuery選擇器以使用一個類(雖然比使用ID略慢)。
最后,在為元素id評估jQuery選擇器時,您需要使用#
,所以這將起作用:
alert($('#' + ClientIDs.test1).val());
在ASP頁面中:
<script>
var test2 = '<%= TextBox2.ClientID %>'
</script>
並且在外部JavaScript中以這種方式訪問TextBox2
:
documnet.getelementByid(test2);
我從來沒有找到一個我喜歡的解決方案,但是我已經實現了幾個並非完全可怕的解決方案:
也許其他SO'ers會有更優雅的解決方案來解決這個問題 - 我期待看到其他的回應。
使用顯式全局參數。
window.clientId ='<%= TextBox1.ClientID%>';
這意味着你有gloabal變量“cilentId”。 然后,您可以在任何地方使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.