簡體   English   中英

如何從外部JavaScript中的ServerControl訪問ClientID

[英]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);

我從來沒有找到一個我喜歡的解決方案,但是我已經實現了幾個並非完全可怕的解決方案:

  • 對於必須引用特定頁面元素的JS代碼,請在.aspx文件中對其進行定義,以便可以訪問<%= btnFoo.ClientID%>。 這些函數可以在.js文件中調用常見的繁重函數。
  • 在.aspx文件中定義javascript變量以保存ClientID值。 .js文件中的函數可以引用這些變量來獲取客戶端ID。 當然,這些函數只能在定義預期變量的頁面上正常工作。

也許其他SO'ers會有更優雅的解決方案來解決這個問題 - 我期待看到其他的回應。

使用顯式全局參數。

window.clientId ='<%= TextBox1.ClientID%>';

這意味着你有gloabal變量“cilentId”。 然后,您可以在任何地方使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM