0

DreamWeaver で Web サイトを作成しています。Spry ウィジェットを使用しました。Spry ウィジェットはナビゲーション用のサイドバーであり、クリックしてタブを開閉できます。複数のタブを開くことができますが、これは私があまり好きではありません。新しいタブが開かれているときに、開いているタブを閉じたいと思います(したがって、開いているタブは常に1つだけになります)。私はjavascriptでプログラミングしたことがなく、jsファイルのコードを見て、それを変更するのはそれほど難しいようには見えませんでした. ここにあります:http://pastebin.com/eZAYE0kZ

タブを開いたときに実行される関数は

Spry.Widget.CollapsiblePanel.prototype.onTabClick = function(e)
{
        if (this.isOpen())
                this.close();
        else
        {
                this.open();
        }


        this.focus();

        return this.stopPropagation(e);
};

、なので、これを正しく修正すると、開いているものを閉じることができると思いました。また、下部にすべてのタブ(またはパネル)を閉じることを目的とした機能があることに気付きました。

Spry.Widget.CollapsiblePanelGroup.prototype.closeAllPanels = function()
{
        var cpanels = this.getPanels();
        var numCPanels = cpanels.length;
        for (var i = 0; i < numCPanels; i++)
        {
                var w = this.getElementWidget(cpanels[i]);
                if (w && w.isOpen())
                        w.close();
        }
};

そのため、前の関数からこの関数を呼び出すことで (何百万ものタブがないと仮定すると、大きな bucle にはなりません)、開いているタブを見つけて閉じることができると思いました。だから私は私が示すように最初のものを修正しました、

Spry.Widget.CollapsiblePanel.prototype.onTabClick = function(e)
{
    if (this.isOpen())
        this.close();
    else
    {
        this.closeAllPanels();
        this.open();
    }


    this.focus();

    return this.stopPropagation(e);
};

しかし、今はタブを開いていません。Javascriptでコーディングしたことがないので、エラーがどこにあるのかわかりません。

4

2 に答える 2

0

あなたの問題は、closeAllPanels() 関数が CollapsiblePanelGroup クラスのメソッドであり、CollapsiblePanel のメソッドではないことです。これが CollapsiblePanel の場合、this.closeAllPanels() を呼び出そうとしています。

私はあなたが使用しているウィジェットに詳しくありませんが、あなたの Panel が属するグループにアクセスする何らかの方法を提供してくれるに違いありません。またはグループなどと呼ばれるプロパティを探します。次に、 this.parent.closeAllPanels() を呼び出すことができます

幸運を!

于 2013-02-06T23:01:42.170 に答える
0

「これ」を削除してみてください。以前から closeAllPanels();

私は最近 JavaScript にあまり関与していませんが、関数に関連するキーワード「this」は、イベントを発生させたコントロール、つまりクリックしたタブを参照していると思います。

このタブには、ページに属する closeAllPanels() という関数はありません。これにより、Null 参照エラーが発生し、残りのスクリプトは実行されません。

于 2013-02-06T23:01:53.920 に答える