所以我想在更新updatepanel后运行一些javaScript函数,所以我有:
function pageLoad() {
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(panelLoaded);
}
function panelLoaded(sender, args) {
alert("foobar");
}
使用上面的代码,如果我更新面板一次,“foobar”将被提醒一次;如果我第二次更新面板,“foobar”会弹出两次;第三次触发面板更新时,“foobar”弹出三次......第四次弹出4次等等......
是什么引起了这个?
感谢~~~
答案 0 :(得分:4)
这是因为pageLoad也在updatepanel回发期间执行。有一个简单的解决方案:
function pageLoad(sender, eventArgs) {
// If this is being executed by ajax
if (eventArgs) {
// And this is only a partial load
if (eventArgs.get_isPartialLoad()) {
// Don't perform any further processing
return;
}
}
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(panelLoaded);
}
答案 1 :(得分:1)
谢谢大家,问题似乎是Sam提到了太多的prm实例。我添加了Sys.WebForms.PageRequestManager.getInstance()。remove_pageLoaded(panelLoaded);在alert()之后,一切都很好。
答案 2 :(得分:0)
这就是发生的事情。 pageLoad
基本上是Application.Init和PageRequestManager.EndRequest的组合。这意味着它适用于应用程序初始化(大约DOM Ready)和每个Partial PostBack
所以pageLoad适用于所有PostBacks;全部和部分。
现在,您再次在ScriptManager的实例上对每个部分回发再次绑定pageLoaded事件,并再次导致此行为。