回发完成后运行Javascript函数

时间:2014-02-27 13:44:58

标签: javascript asp.net vb.net postback dopostback

我正在开发一个带有VB代码的.NET ASP应用程序。我有2个文本框和1个按钮。单击按钮时,使用javascript打开一个新窗口(让我们调用新窗口x)。

 button.OnClientClick = "ShowWindowX();return false;"

ShowWindowX()函数打开一个带有URL的新窗口,该URL从文本框传递两个参数。当我在文本框中插入新值并单击远离文本框(但不在按钮上)时,该页面会进行回发,因为我已将其设置为每当文本框失去焦点时,执行回发,这将回发新值到服务器。

问题是,如果我编辑任何文本框值,例如更改3到4并立即单击按钮,而不先单击文本框,则不会拾取新值,所以我仍然得到3.我试过单击按钮时强制回发:

 btnBBHistory.OnClientClick = "__doPostBack();ShowWindowX();return false;"

虽然这确实会导致回发,但是由于ShowWindowsX函数关闭了打开的窗口,因此回发不会完成。

有人可以建议在ShowWindowX()函数执行之前强制回发完全完成,以便可以通过新的值吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

你必须完全改变你的方法,只要它不是ajax调用,它就会消除页面上的所有内容,页面会刷新。

那么为了实现这一目标可以做些什么呢?您可以在后端检查它,如果在回发调用中加载页面,则添加脚本,如下所示:

if (IsPostBack)
    Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowWindowX", 
    "ShowWindowX();", true);

当然,如果您已经注册了在其中定义ShowWindowX的脚本,则可以这样做。

但是如果您不希望它显示窗口每次回发,您可以在全局存储中设置一个标志,如localStorage,然后在您想要打开窗口时检查它:

btnBBHistory.OnClientClick = "__doPostBack();localStorage.callwin=true;return false;"

并在服务器端页面加载中执行以下操作:

if (IsPostBack)
   Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowWindowX", 
   "if(Boolean(localStorage.callwin)){ShowWindowX();localStorage.callwin='';}",
   true);