0

我有一个非常实用的手风琴,来自我在一个旧存档网站上找到的第 3 方脚本(因此不是我自己的编码)。

http://jsfiddle.net/obmerk99/Rm8Py/1/

现在,我不是 Javascript 人,我想知道如何制作一个全局切换按钮,可以一键打开/关闭整个集合,可以从脚本内部调用方法.. 我试着做

jQuery(this).accordion().activate(this, 'toggle', 'parents');

也只是

jQuery('ul').accordion().activate();

但由于我的 JS 技能接近 NULL,我似乎无法完成这项工作..

有没有办法从这个函数中调用一些内部方法,这将是所有级别和手风琴的全局切换触发器,而无需更改插件代码本身?

4

2 回答 2

1

我不确定我是否理解;手风琴的全部意义在于一次只打开一个窗格,并且切换代码强制执行此操作。修改该插件以在所有 UL 上调用其辅助函数并不难activate,但当它打开每个窗格时,它会关闭所有其他窗格,从而踩到自己。

此外,您不想切换所有窗格,因为有些是关闭的,有些是打开的,所以切换每个窗格不会完成让它们全局打开或关闭。

相反,您必须直接操作 DOM,绕过手风琴的逻辑。当您单击“切换”链接时,这将打开所有窗格:

jQuery("#toggle").click(function(){$("ul").slideDown()});

要真正让它切换,试试这个:

(function(){
    var isClosed = true;
    jQuery("#toggle").click(function(){
        if (isClosed) {
            jQuery("ul").slideDown();
        }
        else {
             jQuery("ul").find("ul").slideUp();
        }
        isClosed = !isClosed;
    });
})();

小提琴:http: //jsfiddle.net/Rm8Py/2/

于 2013-02-13T14:19:20.153 回答
1

activate实际上是一个私有函数,你不能在不改变插件代码的情况下从插件外部调用它。

为了公开它,通常接受方法名称作为参数。(代码简化,通常更优雅一些。)

accordion: function(method, arg1, arg2, arg3) {
    return this.each(function () {
        if (method == "activate") {
            activate(arg1, arg2, arg3);
        }
       // ....
    })

你现在可以这样称呼它:

 myAccordion.accordion("activate", $("ul"))

插件代码被缩小(单字符变量名),所以我不确定activate函数需要什么参数。

于 2013-02-13T14:20:59.490 回答