更新面板刷新后如何运行一些javascript?

时间:2009-07-27 20:56:05

标签: asp.net javascript jquery updatepanel

我有一个pageLoad函数,它在.ascx控件上设置一些我无法更改的css。在页面加载一切正常,但当更新面板更新控件时,我的css不再应用。如何在页面更新后重新运行我的功能?

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

这显然只在初始页面加载时运行。如何在更新后运行它?

5 个答案:

答案 0 :(得分:83)

最简单的方法是在您的javascript代码中使用MSAjax pageLoad事件:

<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 Event刷新。

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

答案 1 :(得分:42)

添加add_pageLoaded处理程序也可以。

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

注意:处理程序将触发任何回调,但您可以使用sender._postBackSettings.panelID来过滤希望调用函数的时间。

更多样本:

答案 2 :(得分:14)

在更新面板的回发期间,在服务器代码中,使用ClientScriptManager向页面添加一些新脚本,如下所示:

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

将javascript封装在与第三个参数匹配的命名函数中,并且应该在回发返回时执行。

答案 3 :(得分:13)

使用放置脚本管理器的相同表单添加代码。

代码背后:

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);
    }
}

答案 4 :(得分:12)

每次UpdatePanel完成时,您也可以绑定到客户端代码(JavaScript)中的事件:

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

所以在这种情况下myFunction();每次发生UpdatePanel回发时都会调用。如果在加载页面时执行此代码,则将在正确的时间调用该函数。