0

フレームセット内に複数のフレームを含むメイン ページがあります。フレームの 1 つはボタン付きのツールバーです。そのツールバーのボタンを押すと、メイン ページのフレームの 1 つが非表示になります。

ツールバーフレーム内から次のことを試しましたが、うまくいきません...

$(document).parent.$("#other_frame").hide("slow");

私は本当に jQuery に慣れていないので、Web を検索した後、ほとんど迷子になりました。

ご協力ありがとうございました。

編集:私の完全なメインページ

<frameset frameborder="0"  rows="70, *">
   <frame name="toolbar" src="toolbar.html" marginwidth="8px" marginheight="8px" />
   <frameset id="lineNumFrameset" frameborder="0" cols="50, *">
      <frameset rows="*, 16">
      <frame id="other_frame" name="lineNum" src="lineNum.html" marginwidth="8px" marginheight="8px" align="top" />
      </frameset>

      <frame name="editor" src="editor.html" marginwidth="8px" marginheight="8px" />
   </frameset>
</frameset>
4

5 に答える 5

2

私はこのようにしました.jqueryなしで、メインフレームにgo()関数を呼び出す「リンク」があります。go 関数は、「FrameSetMain」の最初のフレームを展開または折りたたみます。私はie8とfirefox 3.6でテストしました。

var oggFS = parent.document.getElementById("FrameSetMain");
var startingWidth = oggFS.cols
var w = 0;
function collapse(min) { 
    s = oggFS.cols.split(",");
    w = parseInt(parseFloat(s[0]) / 2);
    oggFS.cols = w + ",8,*";
    if (w>min) { setTimeout("collapse("+min+")",50); } else {
        oggFS.cols = min + ",8,*";
        document.getElementById("link").title = "Show menu";
    }
}
function expand(max) { 
    s = oggFS.cols.split(",");
    if (s[0]==0) s[0]=5;
    w = parseInt(parseFloat(s[0]) * 2);
    oggFS.cols = w + ",8,*";
    if (w<max) { setTimeout("expand("+max+")",50); } else {
        oggFS.cols = max + ",8,*";
        document.getElementById("link").title = "Hide menu";
    }
}
function go(){ if (oggFS.cols != "0,8,*") { collapse(0); } else { s = startingWidth.split(","); expand(s[0]); } }
于 2010-05-18T14:02:31.160 に答える
2
$(document).parent.$("#other_frame").hide("slow");

ああ。ここにいくつかの問題があります。まず、parent()関数を呼び出すことです。ただし、jQuery は を使用してドキュメントから親ドキュメントにステップ アウトできませんparent()window.parentフレームを上に移動するには、次のプロパティが必要です。

window.parent.$('#other_frame').hide('slow');

ただし、これが機能するには、親ドキュメントにロードされた jQuery のコピーが必要になるため、その$. (別のドキュメントのコピーから 1 つのドキュメントをスクリプト化する$ことは、通常は機能しません。jQuery は、特にクロス フレーム スクリプティング用に設計されているわけではありません。)

それが機能しない最後の理由は、フレームセット ページのスクリプト/スタイルを実際に作成できないことです。display: noneブラウザーはこれらの特別なページのスクリプトを無視する場合があり、多くの CSS プロパティはフレーム ( jQuery が使用するを含む) では機能しませんhide()

iframes の代わりにframes を使用して、より簡単にスクリプト化できるページを取得してみてください。(ただし、フレーム スタイルのlayout: fixedものを IE6 で動作させるのは面倒です。) または、それを管理できる場合は、すべてを 1 つのドキュメントで行う方がはるかに管理しやすいでしょう。クロスフレーム スクリプティングには、巧妙で厄介な落とし穴がたくさんあります。

于 2009-11-24T19:21:02.470 に答える
2

私の理解では、div を非表示にするなどのアクションを実行する必要があります。基本的に、影響を与えようとしているものは何でも、css 表示属性に応答する必要があります。フレームを使用する必要がある場合は、代わりに div を使用することを強くお勧めします。フレームを非表示にするのではなく、実際に DOM からフレームを削除する jQuery を作成する必要があります。

于 2009-11-24T17:43:42.027 に答える
1

これを試してください:</ p>

if(window.parent.document.getElementById("myFrameset").cols!="40px,*"){
                $('#left-title-txt').hide();
                window.parent.document.getElementById("myFrameset").cols="40px,*";
                $(this).css('background-image','url(img/openleft.png)');
            }else{
                $('#left-title-txt').show();
                window.parent.document.getElementById("myFrameset").cols="20%,80%";
                $(this).css('background-image','url(img/hideleft.png)');
            }
于 2011-12-29T03:30:07.087 に答える
1

次のような方法でフレームセットを変更できます。

 //hide
        var orig = $('#myFrameSet', top.document).attr('rows');
        $('#myFrameSet', top.document).attr({'rows':'0,*'})

        ....

 //show
        $('#myFrameSet', top.document).attr({'rows':orig})
        orig = null;

列に対してもこれを行うことができます。

于 2011-01-31T19:49:47.283 に答える