我的頁面有一些JavaScript需要在頁面加載時運行。所述JavaScript需要找到ServerControl的客戶端組件,它使用$ find()。
當然,如果我將代碼直接發送到頁面上,它將在頁面正在讀取時執行,並且失敗,因爲它依賴的任何內容都尚未初始化。
如果我把我的代碼放到pageLoad()函數中,它運行得很好,因爲asp.net自動爲任何名爲pageLoad()的函數連接一個onload處理函數。問題是我真的不喜歡pageLoad()解決方案 - 主要是因爲它是一個單一的全球名稱。如果我使用pageLoad()提交了一些代碼,我只知道其他一些程序員將複製該方法,某處不恰當,我們將最終創建一個包含兩個或更多不同pageLoad()函數的頁面,並且結果將會是一連串的神祕錯誤,這些錯誤將會永遠追蹤。
所以,我把我的代碼裏面的一個匿名函數傳遞給jquery的$(document).ready()。這會失敗,因爲它在ServerControl的客戶端組件存在之前運行。
因此,我把我的代碼放在一個匿名函數中,由Sys.Application.add_load()傳遞給它。這也失敗了,因爲Sys是未定義的。所以我最終決定把我的代碼放入Sys.Application.add_load()中,然後把它放在$(document).ready()調用的函數中。這種方法很有效,但它的效果與pageLoad()幾乎一樣。
<script type="text/javascript">
$(document).ready(function(){
Sys.Application.add_load(function(){
var component = $find(<clientid>);
if (component) { <do something> }
});
});
</script>
必須有更好的方式來處理這個問題。
任何想法?
這似乎爲我們工作。 – 2010-09-17 20:49:34