2009-07-27 56 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

相关问题