私は問題を解決したので、私は解決策を求めていません。これは「なぜそれが起こったのか」ということです。理解はすべての根底にあり、なぜそれが起こったのか理解できません。
2つの階層化されたdiv(Div1とDiv2)を含むWebページがあります。Div1をクリックすると、フォームとiframe(「myframe」という名前)を含むボタンが表示されます。Div2が表示されます。ユーザーがDiv2で[キャンセル]をクリックすると、Div 2が空になり、それが消えて、Div1が再び表示されます。すべてがAjaxとPHPを使用してロードされます。
私の問題:Div 1のボタンを初めてクリックすると、すべてが正常に表示され、最も重要なのは、JavaScriptを使用してiframeにアクセスできることです。
両方
var b=window.frames['myframe']
and
var b=window.frames[0]
その結果、alert(b.name)に「myframe」が表示されます。
ただし、奇妙なことに、Div 2をキャンセルして(空にして非表示にして)、まったく同じコードを使用してDiv 1のボタンをもう一度押すと、iframeを参照するときにjavascriptで「NULL」が表示されます。DOMを確認しましたが、キャンセル後にDiv 2は本当に空になり、iframeが2回目に表示され、その内容が正しく表示されます。それでは、なぜjavascriptがそれを取得しないのでしょうか。数分待ってからもう一度ボタンを押して、最初にDiv 2に別のページをロードしようとしましたが、機能しませんでした。
私の解決策は、iframe-nameに時間を追加して、ロードするたびに一意の名前を付けることです。これは正常に機能し、「キャンセル」した後でもjavascriptがiframeにアクセスできるようになりました。
私の質問は、静的な名前を使用しているときに、jsが2回目にiframeを見つけられないのはなぜですか?
div2の内容は次のとおりです。
//THE FORM
<form id="myform" name="myform" class="myform" action="" method="post" enctype="multipart/form-data" target="upload_target" onsubmit="" onkeypress="return keyCheck(event)">
// some form stuff
</form>
<iframe src='imbo/php/system_fotohidden.php' id='myframe' name='myframe'></iframe>
とjavascript:
function click(){
var b=window.frames['myframe'];
alert(b.name);
}
[編集] たぶん、私がdivで何をしているのかを明確にするために:
- Div1のボタン「loadform」をクリックします
- Ajaxは、Div 2のフォームとIframeを含むページをロードします(すべて表示されます)
- div2のIframeにJS=>でアクセスしますJSはIframeを見つけて、その名前をポップアップします
- フォームをキャンセルします:JS => div2.innerHTML ='' and div2.style.display ='none'
- Div1のボタン「loadform」をクリックします
- Ajaxは、Div 2のFormとIframeとまったく同じページをロードします(それでも表示は良好です)
- div2のIframeにJS=>でアクセスしますJSはIframe-nameの代わりにNULLを与えます