2009-08-19 103 views
41

我有一个嵌入式iframe的父文档。在iframe中我有一个上传字段。一旦用户选择了要上传的文件,我就会触发一个jQuery更改事件。在那个事件中,我想在父窗口中设置一个变量为true,以便父级知道上传已经开始。从iframe的父窗口设置变量

有谁知道如何做到这一点?

是想这一点,但没有奏效:

var test; 
$("#newsletter_email").change(function() { 
    parent.window.test = true; 

}); 

$('#send').click(function() { 
    if (test) { 
     alert('File has been uploaded!'); 
    } else { 
     alert('You need to upload a file'); 
    } 
}); 

回答

82

变量在全球范围内都是自动曝光他们的含window对象的DOM属性。

这意味着

var foo = 'bar'; 

类似于

window.foo = 'bar'; 

这意味着您可以阅读任何window对象在全球范围内,你可以得到一个参考。我们在这里还可以暗示的是window的使用是隐含。即使你没有明确地键入“窗口”,它仍然在那里。

而且,由于框架本身也自动暴露作为当前window对象的DOM属性,这意味着你可以访问任何其他框架window对象为好。

parentwindow对象的属性持有该窗口父级(如果有)的对象window的对象。由于I帧肯定有一个父窗口,那么所有这些东西我刚才输入归结为

// set the global variable 'foo' in the parent global scope 
parent.foo = 'bar'; 
+0

我正确地认为这不能在.js文件中,否则父范围将全部搞砸了? – 2009-08-19 18:22:38

+4

否。外部文件采用它们所包含的文档的范围。 – 2009-08-19 18:46:59

+0

+1,这个答案今天真的很有用。从头痛的我挽救了我^^ – marcgg 2010-04-27 13:53:01

3

你也可以把它存储在localStorage的和读取和写,条件是主文档和iframe共享相同的域。

+0

是的,但不是所有的浏览器都支持这个。 – 2013-04-23 17:05:50

+0

我意识到这是一个necroposting,但它与我现在的工作有关,并且有一些库(store.js和store2.js)将localStorage的概念扩展为与浏览器无关。 – pulverize 2016-09-14 17:08:06