2009-08-19 223 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