2013-02-06 61 views
0

我使用DreamWeaver创建了一个网站,并且我使用了一个Spry小部件,它只是一个用于导航的边栏,并且可以通过单击它们来打开和关闭标签。你可以打开多个标签,这是我不太喜欢的。当打开一个新选项卡时,我希望它关闭打开的选项卡(因此您总是会打开一个选项卡)。 我从来没有用JavaScript编写程序,我看了一下js文件的代码,并且修改它看起来并不难。在这里,你就会明白:http://pastebin.com/eZAYE0kZ升级javascript功能。没有经验

我看到,当你打开一个标签时所执行的功能是

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


     this.focus(); 

     return this.stopPropagation(e); 
}; 

,所以我认为正确修改这一条,我可以把它关闭一个是打开。 另外,我realyzed,有在底部的功能,它的目的是要关闭所有标签页(或面板),

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); 
}; 

但它甚至不打开标签了。我不知道错误在哪里,因为我从来没有用Javascript编码过。

+0

为您打开开发人员工具浏览器,看看您是否能在控制台中看到错误。如果出现错误,请尝试修复,否则请在onTabClick上设置一个中断点,看看有什么问题。在Firefox中,你将需要在IE浏览器中使用Chrome开发者工具(Ctrl + Shift + c)的Firebug,我认为他们称之为开发者工具,F12将它们从内存中提取出来。 –

回答

0

你的问题是,closeAllPanels()函数是CollapsiblePanelGroup类的一个方法,而不是CollapsiblePanel。当这个是一个CollapsiblePanel时,你试图调用this.closeAllPanels()。

我不熟悉你使用的小部件,但我敢打赌你的小组会给你一些方法来访问它所属的小组。寻找名为父母或类似的房产。然后你可以调用this.parent.closeAllPanels()

祝你好运!

0

尝试删除'this'。从之前的closeAllPanels();

我最近并没有参与JavaScript,但我相信关于你的函数的关键字'this'指的是触发事件的控件,也就是你点击的标签。

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