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

Hca*_*tek 57 javascript asp.net jquery updatepanel

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

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

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

Kar*_*thi 91

最简单的方法是在您的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>
Run Code Online (Sandbox Code Playgroud)

我已经多次使用它,它的功效就像魅力一样.最重要的是不要将它与document.ready函数混淆(在页面文档对象模型(DOM)准备好执行JavaScript代码之后只会执行一次),而每次更新面板都会执行pageLoad Event刷新.

来源:在更新面板AJAX asp.net之后运行脚本

  • 太棒了!我一直在寻找一种方法来保持javascript执行,同时更新面板刷新,谢谢你的回答! (6认同)

bri*_*nng 44

添加add_pageLoaded处理程序也可以工作.

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoadedHandler);
Run Code Online (Sandbox Code Playgroud)

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

更多样品:


Mar*_*res 15

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

代码背后:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)


wom*_*omp 14

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

ClientScriptManager.RegisterStartupScript(
       typeof(page1), 
       "CssFix", 
       "javascriptFunctionName()", 
        true);
Run Code Online (Sandbox Code Playgroud)

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


Pet*_*ans 12

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

        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){myFunction();});
Run Code Online (Sandbox Code Playgroud)

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