0

我正在使用 DreamWeaver 创建一个网站,我使用了一个 Spry 小部件,它只是一个用于导航的侧边栏,可让您通过单击来打开和关闭选项卡。你可以打开多个标签,这是我不太喜欢的。我希望它在打开新选项卡时关闭打开的选项卡(所以你总是只有一个打开的选项卡)。没用过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();
        }
};

所以我认为通过从前一个函数调用这个函数(假设我没有像 Millons 那样的选项卡,所以它不会做一个大的 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() 。

我不熟悉您正在使用的小部件,但我敢打赌您的面板会给您一些方法来访问它所属的组。查找名为parentgroup或类似的属性。然后你可以调用 this.parent.closeAllPanels()

祝你好运!

于 2013-02-06T23:01:42.170 回答
0

尝试删除“这个”。从 closeAllPanels() 之前开始;

我最近很少接触 JavaScript,但我相信与您的函数相关的关键字“this”指的是触发事件的控件,也就是您单击的选项卡。

此选项卡没有名为 closeAllPanels() 的函数,因为它属于页面。这将导致空引用错误,并且脚本的其余部分不会运行。

于 2013-02-06T23:01:53.920 回答