Asp.net-Ajax

Sys.Application.add_load()與$(文件)。就緒()與頁面載入()

  • September 2, 2010

我有了一些JavaScript需要在頁面載入執行頁面。說JavaScript需要找到一個ServerControl,它與$發現確實()的客戶端組件。

當然,如果我直接發我的程式碼到頁面上,它執行的頁面被讀取,並且失敗,因為沒有這取決於是尚未初始化。

如果我把我的程式碼頁面載入()函式中,它執行得很好,因為asp.net自動線了名為pageLoad的任何功能的onload處理器()。問題是,我真的不喜歡的頁面載入()解決方案 - 主要是因為它是一個單一的全球名稱。如果我犯使用頁面載入()一些程式碼,我只知道,其他一些程序員會複製的方式,地方不合適,我們將與包括兩個或多個不同的頁面載入()函式的頁面結束了,其結果將是一堆,將採取永遠追查神秘的錯誤。

於是,我把我的程式碼。就緒傳遞給jQuery的$(文件)的匿名函式中()。這種失敗,因為它執行的ServerControl的客戶端組件存在了。

於是,我把我的程式碼()由Sys.Application.add_load傳遞給匿名函式內部。這也失敗了,因為Sys系統是不明確的。

所以,我終於看中把我的程式碼中Sys.Application.add_load(),然後把一個由$(文件)稱為.ready函式內的()。這工作,但它提供了幾乎一樣多燒心為頁面載入()。

<script type="text/javascript">
   $(document).ready(function(){
       Sys.Application.add_load(function(){
           var component = $find(<clientid>);
           if (component) { <do something> }
       });
   });
</script>

必須有處理這更好的方式。

有任何想法嗎?

如果你有在後台程式碼控制,您可以通過類似JavaScript的註冊在啟動時執行:

this.Page.ClientScript.RegisterStartupScript(
   this.GetType(), 
   "StartupScript", 
   "Sys.Application.add_load(function() { functioncall(); });", 
   true);

只要你的組件已經通過Sys.Application.add_init載入()你應該罰款…

引用自:https://stackoverflow.com/questions/3630341