0

私は問題を解決したので、私は解決策を求めていません。これは「なぜそれが起こったのか」ということです。理解はすべての根底にあり、なぜそれが起こったのか理解できません。

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で何をしているのかを明確にするために:

  1. Div1のボタン「loadform」をクリックします
  2. Ajaxは、Div 2のフォームとIframeを含むページをロードします(すべて表示されます)
  3. div2のIframeにJS=>でアクセスしますJSはIframeを見つけて、その名前をポップアップします
  4. フォームをキャンセルします:JS => div2.innerHTML ='' and div2.style.display ='none'
  5. Div1のボタン「loadform」をクリックします
  6. Ajaxは、Div 2のFormとIframeとまったく同じページをロードします(それでも表示は良好です)
  7. div2のIframeにJS=>でアクセスしますJSはIframe-nameの代わりにNULLを与えます
4

1 に答える 1

0

要素のinnerHTMLプロパティを "" に設定すると、そのすべての子が削除され、存在しなくなります。名前でも、document.frames、または他のものでも、それらを参照することはできません。

要素を非表示DIVにするには、 を使用できますDIV.style.visibility='hidden';

フィドルの例を次に示しますhttp://jsfiddle.net/ptFwE/1/ ; childNodesのプロパティは、空の文字列に設定しdivた後に子がないと言っていることがわかります。DIVinnerHTML

他の目的でこの div が必要な場合はvisibility、IFRAME をhiddenonly に設定するか、別の DIV を使用することを検討してください。

于 2013-03-20T08:46:34.693 に答える