2011-08-11 162 views
49

我有一个页面,我们可以调用parent.php。在这个页面中,我有一个提交表单的iframe,除此之外,我有一个ID为“target”的div。是否有可能在iframe中提交表单,以及何时成功刷新目标div。说装入一个新的页面或东西?从iframe访问父窗口的元素

编辑: 目标股利在父页面,所以我的问题是基本上,如果你可以作为一个例子在iframe之外的父母的jQuery调用。那该怎么看?

编辑2: 所以这就是我的jQuery代码现在的样子。它位于iframe页面中。在div #target在parent.php

$(;"form[name=my_form]").submit(function(e){  
e.preventDefault; 
window.parent.document.getElementById('#target'); 
$("#target").load("mypage.php", function() { 
$('form[name=my_form]').submit(); 
}); 
}) 

我不知道如果脚本是活动的原因表单提交succcessfully但没有任何反应的目标。

编辑3:

现在我正在试图从iframe中的链接调用父页面。没有任何成功

<a href="javascript:window.parent.getElementById('#target').load('mypage.php');">Link</a> 
+0

目标div位于父页面或iframe? – ShankarSangoli

+0

其在父页面,所以我的问题是基本上,如果你可以作为一个例子的jQuery调用之外的iframe到父。 – Paparappa

回答

97

我认为这个问题可能是你没有发现,因为在你的电话的“#”的元素来得到它:

window.parent.document.getElementById('#target'); 

您只有在使用jQuery需要的#。这应该是:

window.parent.document.getElementById('target'); 
+6

如果网站容器和iframe位于不同的域中,该怎么办? –

+1

@Michelem我认为你运气不好;为了您有权访问父级,iframe需要具有父级的相同协议和域。这是防止跨域脚本编写的安全措施。 –

+1

@Michelem:如果iframe和父母在不同的域上,与父级通信的唯一方法是使用window.postMessage()。不过,这只有在你能控制两端时才有可能。文档在这里:https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage –

8

在iframe中有下面的js并使用ajax提交表单。

$(function(){ 

    $("form").submit(e){ 
     e.preventDefault(); 

     //Use ajax to submit the form 
     $.ajax({ 
      url: this.action, 
      data: $(this).serialize(), 
      success: function(){ 
      window.parent.$("#target").load("urlOfThePageToLoad"); 
      }); 
     }); 

    }); 

}); 
+0

它通过ajax提交表单,但目标div始终保持原样。这似乎是因为它的工作与iframe中的parent.php进行通信。 – Paparappa

+0

如果iframe在同一个域中,那么您不会有任何问题。你可以尝试提醒'window.parent。$(“#target”)。长度“在成功处理程序中。 – ShankarSangoli

+0

iframe在同一个域中。那么我把代码,而不是window.parent。$(“#target”)。load(“urlOfThePageToLoad”);但它什么都没有返回。它在代码中的“形式”是什么,它应该是表单的名称?这可能吗? – Paparappa

4

我想你可以使用iframe中的window.parent。 window.parent返回父页面的窗口对象,所以你可以这样做:无论你想与该div

window.parent.document.getElementById('yourdiv'); 

然后做。

+0

我是一个jquery新手,但我应该把这样的东西放在ifram文件中? – Paparappa

+0

$(文件)。就绪(函数(){\t \t \t \t window.parent.document.getElementById( '#靶'); \t \t $( “#靶标”)的负载( “file.php”);。 }); – Paparappa

+0

可能更像:$(document).ready(function(){$(window.parent.document.getElementById(“target”))。load(“file.php”)); }); – varfoo

5

您可以从一个iframe内使用window.parent这样访问父窗口的元素:

// using jquery  
window.parent.$("#element_id"); 

这是一样的:

// pure javascript 
window.parent.document.getElementById("element_id"); 

而且如果您有多个嵌套iframe,并且您想访问最顶级的iframe,那么您可以使用window.top,如下所示:

// using jquery 
window.top.$("#element_id"); 

这是一样的:

// pure javascript 
window.top.document.getElementById("element_id"); 
相关问题