特定のアクションでiframeを表示し、iframeをHTMLで埋めるページがあります(たとえば、複数選択ボックスとOKボタンなど)。
iframe の OK ボタンには、次のように onClick メソッドが定義されています。
onClick="parent.hideIFrame();parent.processMultiSelectBox();"
ユーザーが iframe で [OK] をクリックすると (おそらく複数選択ボックスで遊んだ後)、iFrame がすぐに消えて、複数選択ボックスで選択された値が処理できるようになります。しかし、これは起こっていることではありません。iFrame は、他の関数が実行されている間も表示されたままになり、2 番目の関数が終了した後にのみ消えます。
hideIFrame 関数は非常に単純です。
function hideIFrame() {
frmObj = document.all.iFrameID;
if(frmObj) {
frmObj.style.visibility = "hidden";
}
}
わかりやすくするために、上記の関数を言い換えました (いくつかのインジケーター変数の割り当てなどを削除しました)。
2 番目の関数は、複数選択オブジェクトのすべてのオプションを実際にループし、処理を行います。これには約 0.5 秒かかり、それが完了すると iFrame が消えます。[OK] をクリックしたときに 0.5 秒間残るのは少し面倒です。
私の質問は、くそったれをより速く消す方法があるかどうかです。「古典的な C」の用語で言えば、可視性の変更がすぐに発生する「フラッシュ」はありますか?
2 番目の関数の最初の行として「アラート」を配置すると、iframe はすぐに消えますが、2 番目の関数が完了するまでの間、アラート ボックスの [OK] が残ることに気付きました。
ありがとう。
編集: DDaviesBrackett の回答に基づいて、これは私がやったことです:
iframe の onclick が次のように変更されました。
onClick="parent.hideAndProcessMultiSelectBox(parm1, parm2);"
hideAndProcessMultiSelectBox 関数は次のように定義されています。
function hideAndProcessMultiSelectBox( parm1, parm2 ) {
hideIFrame();
setTimeout( function() { processMultiSelectBox( parm1, parm2 ); }, 0 );
}
出来上がり..遅れることはありません..