0

我有一个 UpdatePanel 并想在回发后执行一个 javascript 操作,我的所有页面都使用全局pageLoad(sender, args),所以我不能pageLoad(sender, args)为这个特定事件使用 a,我尝试了以下 2 种方法:

//Global pageLoad, executes in all pages
function pageLoad(sender, args) {
    myGlobalCode();

    try {localPageLoad(sender, args)} 
    catch (err) {}
}

// This is in the page with the update panel
function localPageLoad(sender, args) {
    if ($('#AfterPostback').val() == 'SHOWTOOLBOX')
        // etc....
}

这里的问题是同步性,如果我在这段代码中设置调试警报一切正常,但如果我在没有警报的情况下执行它什么都不做,所以我猜它与文档完成有关

我尝试的另一件事是在部分回发触发的事件中使用 ScriptManager:

    cstext1.Append(String.Format("alert('CS TOOL'); showToolbox({0});", AfterPostbackParams.Value))
    ScriptManager.RegisterClientScriptBlock(Me, GetType(Page), "InitPage", cstext1.ToString(), True)

我发现同样的问题,如果我设置调试警报一切正常,如果我像这样运行代码它不起作用。

有任何想法吗?谢谢

4

2 回答 2

0

在使用更新面板和额外的 javascript 执行时,我总是比RegisterStartupScript使用RegisterClientScriptBlock. 例子:

cstext1.Append(String.Format("showToolbox({0});", AfterPostbackParams.Value));
ScriptManager.RegisterStartupScript(Me, GetType(Page), "InitPage", cstext1.ToString(), True);

UpdatePanels 的美妙之处在于它们很容易通过使用 fiddler 或任何现代浏览器开发工具的网络选项卡来诊断问题。由于UpdatePanel只需将被替换的 HTML 发送回面板 div 即可工作,因此您可以轻松查看返回的内容以确保其有意义。

于 2013-09-12T13:00:44.120 回答
0

您可以使用以下内容吗?

Sys.WebForms.PageRequestManager.getInstance().add_beginRequest();
Sys.WebForms.PageRequestManager.getInstance().add_endRequest();

http://msdn.microsoft.com/en-us/library/bb397432.aspx

于 2013-09-12T12:08:59.930 回答