2011-07-08 44 views
0

我有3個用戶控件,每個用戶都在javascript中使用pageLoad函數,並且這些用戶控件位於頁面中,頁面具有自己的pageLoad函數。但誰我在頁面註冊的最後一個用戶控件的唯一pageLoad函數中被觸發,其他沒有被解僱如何在多個用戶控件中使用pageLoad函數

<script type="text/javascript"> 

... 
function pageLoad() { 
    alert('page load - uc1'); 
    ..... 
} 
... 

請幫助我如何解僱所有功能

感謝

回答

2

可以定義JavaScript函數爲每個控件並執行它Application.Init和PageRequestManager.EndRequest事件:

客戶端:

function controlSpecificPageLoadFunction(){ alert("Hello, pageLoad!"); } 

後面的代碼:

if(!IsPostBack) 
{ 
    var script = "Sys.Application.add_init(controlSpecificPageLoadFunction); Sys.WebForms.PageRequestManager.getInstance().add_endRequest(controlSpecificPageLoadFunction)"; 
    ScriptManager.RegisterStartupScript(this, this.GetType(), "thisControlPageLoad", script, true); 
} 
+0

謝謝,但是當我嘗試使用這個,我得到這個錯誤:'Sys'是未定義的 –

+0

將RegisterClientScriptBlock更改爲RegisterStartupScript –

+0

是的,它的工作。腳本結尾處的分號當然會丟失。謝謝 –

1

有一個名爲已越來越流行的非侵入式JavaScript範例。你應該閱讀它。

http://labs.adobe.com/technologies/spry/articles/best_practices/separating_behavior.html

http://en.wikipedia.org/wiki/Unobtrusive_JavaScript

基本上而不是說onload="myfunction()",你連線了處理器在JS本身...

document.getElementById('myElement').addEventListener('click', myfunction) 

function myfunction() { ... } 

在你的情況,這將是像

document.body.addEventListener('load', myfunction); 

然而,這有其自身的缺陷。我強烈推薦使用像jQuery,MooTools,Dojo或EXT這樣的庫,而不是從頭開始編寫JavaScript。

+0

謝謝傑夫,我讀了你的建議文章 –

相關問題