2009-07-27 101 views
43

我有一個pageLoad函數,它在一個.ascx控件上設置了一些我不能改變的css。在頁面加載一切都很好,但更新面板更新控件時,我的CSS不再適用。如何在頁面更新後重新運行我的功能?如何在更新面板刷新後運行一些JavaScript?

$(function() { 
     $("textarea").attr("cols", "30"); 
     $("input.tbMarker").css({ "width": "100px" }).attr("cols","25"); 
    }); 

這顯然只在初始頁面加載時運行。如何在更新後運行它?

+0

扎入在客戶端側的MSAjax pageLoad的事件: http://stackoverflow.com/questions/9026496/running-script-after-update-panel-ajax-asp網絡 – dotnettex 2012-06-11 19:12:15

+0

http://stackoverflow.com/a/339114/900284 – 2012-12-10 04:37:59

回答

38

添加add_pageLoaded處理程序也可以。

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoadedHandler); 

注:該處理程序將火任何回調,但可以使用sender._postBackSettings.panelID來過濾,當你想叫你的函數。

更多樣本:

+0

這太棒了!另外,如果沒有明確的面板(例如,也許你正在使用一些在後臺使用UpdatePanel的Telerik Control),那麼你也可以使用`sender._postBackSettings.asyncTarget`來驗證當前的回發是否是你正在尋找的回發對於。 – 2016-06-06 08:41:40

13

在回傳的更新面板,在服務器代碼,使用ClientScriptManager一些新的腳本添加到頁面中,這樣的事情:

ClientScriptManager.RegisterStartupScript(
     typeof(page1), 
     "CssFix", 
     "javascriptFunctionName()", 
     true); 

封裝你的JavaScript在一個名爲函數第三匹配參數,它應該在回發返回時執行。

11

您也可以綁定到客戶端代碼的每一個UpdatePanel完成這樣一次事件(JavaScript的):

 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){myFunction();}); 

所以在這種情況下myFunction();將在每次發生UpdatePanel回發時調用。如果您在加載頁面時執行此代碼,則會在正確的時間調用該函數。

12

以與放置腳本管理器相同的形式添加代碼。

代碼背後:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (ScriptManager1.IsInAsyncPostBack) 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.Append("<script language='javascript' type='text/javascript'>"); 
     sb.Append("Sys.Application.add_load(func);"); 
     sb.Append("function func() {"); 
     sb.Append("Sys.Application.remove_load(func);"); 
     sb.Append("alert('I am Batman!');"); 
     sb.Append("}"); 
     sb.Append("</script>"); 
     ScriptManager.RegisterStartupScript(this, GetType(), "script", sb.ToString(), false); 
    } 
} 
69

最簡單的辦法就是用MSAjax頁面加載事件在JavaScript代碼:

<script> 
    ///<summary> 
    /// This will fire on initial page load, 
    /// and all subsequent partial page updates made 
    /// by any update panel on the page 
    ///</summary> 
    function pageLoad(){ alert('page loaded!') } 
</script> 

我已經用了很多次,它就像魅力。最重要的是不要將它與document.ready函數混淆(在頁面文檔對象模型(DOM)準備好執行JavaScript代碼之後,該函數只會執行一次),但每次更新面板都會執行pageLoad事件刷新。

來源:Running script after Update panel AJAX asp.net