我在Javascript中做了一个小日历弹出。 很简单,从使用ASP.NET Calendar控件。 我打电话跟在showModalDialog弹出窗口。 在模态窗口,更改日历的当前月份会导致因为回传的问题,我在好几个地方,解决办法是把发现:
<base target="_self"/>
在aspx文件的头部。 除了一两件事,只有在谷歌浏览器一切都很正常......。 找回选择的日期,我设置了弹出日历中选择的日期的returnValue。 在IE和Firefox,它始终工作。 在Chrome中,但是,它只能如果我不改变当前月份的日历。 当我改变它,返回值不回传给在showModalDialog的调用者。 这是因为如果模态窗口是不是原单了; 返回值是不确定的。
有没有人经历过这种行为,并有一个建议,使工作? 我试着用dialogArguments让呼叫者窗口的痕迹,但它得到仅使第一模态窗口(这是改变目前一个月后丢失)。
调用过程中的代码:
var d = window.showModalDialog(...)
在模态窗口中的代码:
window.returnValue = selectedDate;
self.close();
正如我Teemu,selectedDate和window.returnValue说都总是正确的。 然而,谷歌浏览器的情况下(在日历中的一个月的变化),的returnValue不是由在showModalDialog传回,d是不确定的。
为了保持在我的网页使用的showModalDialog,我只好拿出我自己的解决方法的错误。 所以,在这里它是...
在谷歌浏览器,回传后,在showModalDialog总是返回undefined。 然而,在模态对话框点到呼叫者窗口window.opener财产,甚至回传后。 于是,我想到了把结果对话框中的电话,对方窗口的returnValue属性。 和它的作品。
在来电窗口:
var prevReturnValue = window.returnValue; // Save the current returnValue
window.returnValue = undefined;
var dlgReturnValue = window.showModalDialog(...);
if (dlgReturnValue == undefined) // We don't know here if undefined is the real result...
{
// So we take no chance, in case this is the Google Chrome bug
dlgReturnValue = window.returnValue;
}
window.returnValue = prevReturnValue; // Restore the original returnValue
At this point, use dlgReturnValue for further processing
在模态对话框窗口:
if (window.opener)
{
window.opener.returnValue = dateValue;
}
window.returnValue = dateValue;
self.close();
我有同样的错误,我在一些论坛上发现的是,如果你把你的控件在UpdatePanel中和的ContentTemplate它会工作:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
</ContentTemplate>
</asp:UpdatePanel>