2009-08-19 14 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オブジェクトのグローバルスコープを読むことができることを意味し

window.foo = 'bar'; 

に類似していること。意味ここで意味することは、windowの使用が暗黙的であることです。明示的に「ウィンドウ」と入力しなくても、それはそこにあります。

自体も現在windowオブジェクトのDOMプロパティとしてを自動さらされているフレームいるので、これはあなたにも、他のフレームwindowオブジェクトにアクセスできることを意味します。

windowオブジェクトのプロパティは、そのウィンドウの親オブジェクト(存在する場合)のwindowオブジェクトを参照しています。アイフレームが最も確かに親ウィンドウを持っているので、その後、私はちょうど入力されたすべてのこのようなものは、この

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

これは.jsファイル内にあることはできないと思っていますか、親スコープはすべて壊れていますか? –

+4

いいえ。外部ファイルは、それらが含まれているドキュメントのスコープを採用しています。 –

+0

+1、この回答は本当に今日役立ちました。大きな頭痛から私を救った^^ – marcgg

3

に沸くまたのlocalStorageでそれを保存し、読んでいることを提供し、それから書くことができ、メイン文書との両方iframeは同じドメインを共有します。

+0

すべてのブラウザでサポートされているわけではありません。 –

+0

これはちょっとしたネストポスティングですが、私の仕事には関係しています。そこにはlocalStorageのコンセプトを拡張してブラウザに依存しないライブラリ(store.jsとstore2.js)がいくつかあります。 – pulverize

関連する問題