从一个窗体回调另一个窗体方法,出现诡异的问题..(没有权限)
页面A,页面B
IE6
在页面A中弹出页面B (用JS弹出DIV,在里面嵌Iframe),页面B确认按钮触发页面A的
btnAddNetWork按钮事件进行异步更新,并关闭弹出窗体.. 结果有一定机率报没有权限的错误。。
页面A相关代码:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Repeater ID="dgNetWork" runat="server" OnItemCommand="dgNetWork_ItemCommand"
OnItemDataBound="dgNetWork_ItemDataBound">
<!--此按钮触发服务器事件,异步更新此处html内容-->
</asp:Repeater>
<input class="btn" id="btnAddNetWork" runat="server" style="display: none;" type="button"
value="添加网点" onserverclick='btnAddNetWork_Click' />
</ContentTemplate>
</asp:UpdatePanel>
function AddMultNetWork(arrText, arrValue)
{
var hiIDs = document.getElementById("hiSelNetWorkIDs");
hiIDs.value = "";
for (var i = 0; i < arrText.length; i++)
{
if (!CheckNetWorkExists(arrValue[i]))
{
hiIDs.value += "," + arrValue[i] + ",";
}
}
if (hiIDs.value != "")
{
//CloseWindowDiv(); //若加上此行
document.all.btnAddNetWork.click();
}
}
页面B相关代码:
在按钮确认事件中,关闭弹出JSForm,并触发A页面中的一个方法AddMultNetWork(),然后关闭本窗体
window.parent.AddMultNetWork(arrText, arrValue);
window.parent.CloseWindowDiv(); //若去掉此行
进行以下改动执行正确: 将页面B window.parent.CloseWindowDiv();这行放在页面A里就不会报错了
将页面B:
window.parent.CloseWindowDiv();去掉,
再将页面A的函数AddMultNetWork某处改成
if (hiIDs.value != "")
{
CloseWindowDiv();
document.all.btnAddNetWork.click();
}
总结思考:
页面B调用页面A的两个方法
window.parent.Method1(); //此方法里有异步ajax执行
window.parent.Method2(); //此方法是同步执行
上面执行可能会出权限之类的js错误。。
将 Method2,放在 Method1里并且在异步Ajax执行之前就没问题了