升级javascript函数。没有经验

升级javascript函数。没有经验,javascript,web,Javascript,Web,我正在用DreamWeaver创建一个网站,我使用了一个Spry小部件,它只是一个用于导航的侧栏,允许您通过单击来打开和关闭选项卡。你可以打开多个标签,这是我不喜欢的。我希望它在打开一个新选项卡时关闭打开的选项卡(这样您将始终只有一个打开的选项卡)。 我从来没有用javascript编程过,我看了一下js文件的代码,修改它看起来并不难。给你: 我看到打开选项卡时执行的函数是 Spry.Widget.CollapsiblePanel.prototype.onTabClick = function(

我正在用DreamWeaver创建一个网站,我使用了一个Spry小部件,它只是一个用于导航的侧栏,允许您通过单击来打开和关闭选项卡。你可以打开多个标签,这是我不喜欢的。我希望它在打开一个新选项卡时关闭打开的选项卡(这样您将始终只有一个打开的选项卡)。 我从来没有用javascript编程过,我看了一下js文件的代码,修改它看起来并不难。给你:

我看到打开选项卡时执行的函数是

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


        this.focus();

        return this.stopPropagation(e);
};
,所以我认为正确地修改这个,我可以使它关闭打开的那个。 此外,我意识到底部有一个功能,其目标是关闭所有选项卡(或面板)


但现在它甚至还没有打开一个标签。我不知道错误在哪里,因为我从未用Javascript编写过代码。

您的问题是closeAllPanels()函数是CollapsablePanelGroup类的方法,而不是CollapsablePanel类的方法。当为可折叠面板时,您试图调用此.closeAllPanels()

我不熟悉您正在使用的小部件,但我打赌您的面板将为您提供一些访问它所属组的方法。查找名为父属性或类似属性。然后您可以将其命名为.parent.closeAllPanels()


祝你好运

在关闭所有面板之前,尝试删除“this.”

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


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

打开浏览器的“开发人员工具”,查看是否可以在控制台中看到错误。如果出现错误,请尝试修复,否则请在ONTAB上设置断点,然后单击以查看发生了什么。在Firefox中,你会想要Firebug,在chrome开发者工具(Ctrl+Shift+c)中,在IE中,我想他们称之为开发者工具,F12会从内存中调用它们。
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();
        }
};
Spry.Widget.CollapsiblePanel.prototype.onTabClick = function(e)
{
    if (this.isOpen())
        this.close();
    else
    {
        this.closeAllPanels();
        this.open();
    }


    this.focus();

    return this.stopPropagation(e);
};