2009-02-27 21 views
1

我正在重構將<body onload="myJS();">用於用戶控件的頁面。我知道我可以在加載時使用服務器端腳本註冊。替換用戶控件中的body.onload

如果我想在客戶端(ascx)執行此操作,我該怎麼做?

回答

2

http://snipplr.com/view/3116/cross-browser-add-event-listener/

// Cross-browser implementation of element.addEventListener() 

function addEvent(evnt, elem, func) { 
    if (elem.addEventListener) // W3C DOM 
     elem.addEventListener(evnt,func,false); 
    else if (elem.attachEvent) { // IE DOM 
     var r = elem.attachEvent("on"+evnt, func); 

    return r; 
} 

兩者使用方法如下:addEvent(window, your_onload_handler)。或者你可以使用jquery來做這個以及其他許多事情。

+0

請詳細說明一下嗎?我們在哪裏給'addEvent(window,your_onload_handler)`調用?使用`your_onload_handler`是否意味着我們想要在用戶控件加載時調用的函數? `addEvent`方法有三個參數,你怎麼只傳遞兩個參數? – 2015-10-12 12:28:29

2

Romme的客戶端方法是最好的。

<script runat="server"> 

protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    string strScript = "myJS();"; 
    Page.ClientScript.RegisterStartupScript(this.GetType(), "OnLoadScript_" + this.ClientID, strScript, true); 
} 

</script> 
1

的OnLoad通常是一個不錯的方法來初始化JS:不過爲了以防萬一有人想知道如何在ASCX文件中使用服務器端代碼來執行它,在你的模板頂部堅持這,因爲只有在所有資源完成加載(包括頁面中的任何圖像)時纔會觸發它。

最簡單,最可靠的方法來調用JavaScript要當頁面完成加載是把一個內聯<script>塊到HTML的底部,收盤</body> tag之前執行:

<body> 
    ... your page here ... 
    <script>myJS();</script> 
</body> 
</html> 
+0

您能否解釋爲什麼在所有資源加載完成後初始化JS都不好? – DotnetDude 2009-02-27 23:49:43

相關問題