如何在更新面板刷新后运行一些JavaScript?
我有一个pageLoad函数,它在一个.ascx控件上设置了一些我不能改变的css。 在页面加载一切都很好,但更新面板更新控件时,我的CSS不再适用。 如何在页面更新后重新运行我的function?
$(function() { $("textarea").attr("cols", "30"); $("input.tbMarker").css({ "width": "100px" }).attr("cols","25"); });
这显然只在最初的页面加载上运行。 如何在更新后运行它?
添加一个add_pageLoaded处理程序也可以工作。
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoadedHandler);
注意:处理程序将触发任何callback,但是您可以使用sender._postBackSettings.panelID
来过滤何时调用您的函数。
更多样品:
最简单的方法是在JavaScript代码中使用MSAjax pageLoad Event:
<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后运行脚本
在回发更新面板的过程中,在服务器代码中,使用ClientScriptManager向页面添加一些新的脚本,如下所示:
ClientScriptManager.RegisterStartupScript( typeof(page1), "CssFix", "javascriptFunctionName()", true);
将你的javascript封装在一个命名的函数中,该函数与那里的第三个参数相匹配,并且在回发函数返回时执行。
以与放置脚本pipe理器相同的forms添加代码。
代码背后:
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); } }
每次UpdatePanel完成后,您还可以绑定到客户端代码(JavaScript)中的事件:
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){myFunction();});
所以在这种情况下myFunction(); 将在每次发生UpdatePanel回发时被调用。 如果您在加载页面时执行此代码,则会在正确的时间调用该函数。