javascript函数在回发完成后运行
-
23-12-2019 - |
题
我正在使用后面的VB代码开发.NET ASP应用程序。我有2个TextBoxes和1个按钮。单击按钮时,使用JavaScript打开新窗口(让我们调用新窗口x)。
button.OnClientClick = "ShowWindowX();return false;"
.
showwindowx()函数打开一个新窗口,其中包含从文本框中的两个参数中传递的URL。当我将新值插入文本框时,单击“远离文本框”(但不在按钮上)时,页面会进行回发,因为我已将其设置为在TextBoxes失去焦点时,执行将发布新值的回发到服务器。
问题是,如果我编辑任何文本框值,如更改3到4,请立即单击按钮,无需单击文本框首先,未拾取新值,所以我仍然得到3.我尝试过在通过以下内容按钮时强制回发:
btnBBHistory.OnClientClick = "__doPostBack();ShowWindowX();return false;"
.
虽然这确实导致回发,但在关闭由于showwindowsx函数由于showwindowsx函数打开而打开的窗口之前,返回不会完成。
任何人都可以建议在ShowWindowx()函数执行之前强制回发以完全完成的方式,以便可以通过?
提前感谢
解决方案
你必须完全改变你的方法,就不是一个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);
. 不隶属于 StackOverflow