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

IT技术 asp.net javascript jquery updatepanel
2021-02-05 14:40:43

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

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

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

5个回答

最简单的方法是在您的 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 事件刷新。

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

惊人的 !很长一段时间以来,我一直在寻找一种在更新面板刷新时保持 javascript 执行的方法,感谢您的回答!
2021-03-15 14:40:43
变量第一次加载 = 0; function pageLoad() { if (firstload==0)firstload=1; else { alert('回传!'); }
2021-03-25 14:40:43
刚刚在一个项目中解决了这种情况 - 这对我来说是最简单和最可靠的。add_pageLoadedRegisterStartupScript方法是很难通过回调来跟踪和调试,但pageLoad只要作品(TM)
2021-03-28 14:40:43

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

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

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

更多样品:

这很棒!此外,如果没有显式面板(例如,您可能正在使用某些在幕后使用 UpdatePanels 的 Telerik Control),您还可以使用sender._postBackSettings.asyncTarget来验证当前回发是否是您要查找的回发。
2021-04-05 14:40:43

以您放置脚本管理器的相同形式添加代码。

背后的代码:

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

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

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

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

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

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

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