更新面板刷新后如何运行一些 javascript?
Posted
技术标签:
【中文标题】更新面板刷新后如何运行一些 javascript?【英文标题】:How can I run some javascript after an update panel refreshes? 【发布时间】:2010-11-14 12:03:28 【问题描述】:我有一个 pageLoad 函数,它在我无法更改的 .ascx 控件上设置一些 CSS。在页面加载时一切都很好,但是当更新面板更新控件时,我的 CSS 不再应用。页面更新后如何重新运行我的函数?
$(function()
$("textarea").attr("cols", "30");
$("input.tbMarker").css( "width": "100px" ).attr("cols","25");
);
这显然只在初始页面加载时运行。更新后如何运行?
【问题讨论】:
在客户端绑定到 MSAjax pageLoad 事件:***.com/questions/9026496/… ***.com/a/339114/900284 【参考方案1】:最简单的方法是在您的 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 事件将在每次更新面板时执行刷新。
来源:Running script after Update panel AJAX asp.net
【讨论】:
太棒了!很长一段时间以来,我一直在寻找一种在更新面板刷新时保持 javascript 执行的方法,感谢您的回答! 刚刚在一个项目中解决了这种情况 - 这对我来说是最简单和最可靠的。add_pageLoaded
和 RegisterStartupScript
方法更难通过回调跟踪和调试,但 pageLoad
Just Works(tm)
var firstload = 0;函数 pageLoad() if (firstload==0)firstload=1; else alert('回发!'); 【参考方案2】:
添加 add_pageLoaded 处理程序也可以工作。
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoadedHandler);
注意:处理程序将触发任何回调,但您可以使用sender._postBackSettings.panelID
来过滤何时调用您的函数。
更多示例:
http://blog.jeromeparadis.com/2007/03/01/1501/ http://zeemalik.wordpress.com/2007/11/27/how-to-call-client-side-javascript-function-after-an-updatepanel-asychronous-ajax-request-is-over/【讨论】:
这太棒了!此外,如果没有明确的面板(例如,您可能正在使用一些在幕后使用 UpdatePanels 的 Telerik Control),您还可以使用sender._postBackSettings.asyncTarget
来验证当前回发是否是您正在寻找的那个。跨度>
【参考方案3】:
以您放置脚本管理器的相同形式添加代码。
代码背后:
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】:在更新面板的回发期间,在服务器代码中,使用 ClientScriptManager 向页面添加一些新脚本,如下所示:
ClientScriptManager.RegisterStartupScript(
typeof(page1),
"CssFix",
"javascriptFunctionName()",
true);
将您的 javascript 封装在与那里的第三个参数匹配的命名函数中,并且它应该在回发返回时执行。
【讨论】:
【参考方案5】:您还可以在每次 UpdatePanel 完成时绑定到客户端代码 (JavaScript) 中的事件,如下所示:
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function()myFunction(););
所以在这种情况下 myFunction();每次发生 UpdatePanel 回发时都会调用。如果您在页面加载时执行此代码,该函数将在正确的时间被调用。
【讨论】:
以上是关于更新面板刷新后如何运行一些 javascript?的主要内容,如果未能解决你的问题,请参考以下文章