JavaScript的 - 在showModalDialog无法在Chrome返回值JavaScri

2019-05-13 13:59发布

我在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是不确定的。

Answer 1:

为了保持在我的网页使用的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();


Answer 2:

我有同样的错误,我在一些论坛上发现的是,如果你把你的控件在UpdatePanel中和的ContentTemplate它会工作:

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
           <ContentTemplate>
           </ContentTemplate>
 </asp:UpdatePanel>


文章来源: javascript - showModalDialog not returning value in Chrome