我有一个asp.net webform。 表单上有一些用户将填写的字段。 有一个超链接打开一个模态窗口(我正在使用jquery& prettyphoto,但可能切换到http://www.ericmmartin.com/projects/simplemodal/,因为他的文档更好)
模态窗口包含一个iFrame,用户可以在其中进行选择并保存记录。
此时我需要关闭该窗口并在父页面上触发回发。
目前我在最后一页上有一个超链接,其中target = parent和href =父页面url。 然后我有一个自动点击它的JavaScript。我知道这是一个廉价的黑客。 然后它将用户发送回父页面,但重新加载页面并丢失所有原始数据。 这就是问题所在。
最好的方法是什么?
谢谢!
答案 0 :(得分:2)
如果父窗口和子iframe位于同一个域中,那么这应该非常简单。
在iframe内部,window.parent
引用外部window
对象,而在外部页面中,它引用自身。
https://developer.mozilla.org/en/DOM/window.parent
因此,在iframe中,您可以按以下方式编写代码:
// Check to make sure we're an iframe
if (window.parent !== window) {
// Run an arbitrary function in the parent window
var daddy = window.parent;
daddy.doStuffThatSubmitsAFormInTheParentPage();
}
// Make sure you have that function defined in the parent page.
以下是jsbin中访问的示例。你需要一个控制台才能看到爱情。
如果您想要相关代码
答案 1 :(得分:0)
凭借Alex的解决方案,我能够解决这个问题。
在父页面上,我有:
<script language="JavaScript">
<!--
function clickPostBackButton() {
document.getElementById("<%=PostBackButton.ClientID%>").click();
}
-->
</script>
<asp:Button CssClass="hide" CausesValidation="false" runat="server" Text="Postback" ID="PostBackButton" />
然后在加载在模态窗口中的iFrame上。我有一个带按钮的表格。该按钮将用户带到另一页。在这个页面上我有这个代码:
<script language="javascript" type="text/javascript">
// Check to make sure we're an iframe
if (window.parent !== window) {
// Run an arbitrary function in the parent window
var daddy = window.parent;
daddy.clickPostBackButton();
}
// Make sure you have that function defined in the parent page.
</script>
此时关闭模态窗口并触发父页面回发。 重要的是要注意我的按钮有CausesValidation =“false”,没有这个我的页面有验证问题。感谢您的提示Alex Sexton