Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS-Jquery-从Jquery插件内部调用方法_Javascript_Jquery_Toggle_Accordion - Fatal编程技术网

Javascript JS-Jquery-从Jquery插件内部调用方法

Javascript JS-Jquery-从Jquery插件内部调用方法,javascript,jquery,toggle,accordion,Javascript,Jquery,Toggle,Accordion,我有一个非常实用的手风琴,来自我在一个旧的存档网站上找到的第三方脚本(所以不是我自己的编码) 现在,我不是一个Javascript人,我想知道如何制作一个全局切换按钮,一次点击就能打开/关闭整个集合,从脚本内部调用方法是可能的。。 我试着去做 jQuery(this).accordion().activate(this, 'toggle', 'parents'); 而且还只是 jQuery('ul').accordion().activate(); 但由于我的JS技能接近于零,我似乎无法做

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

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

jQuery(this).accordion().activate(this, 'toggle', 'parents');
而且还只是

jQuery('ul').accordion().activate();
但由于我的JS技能接近于零,我似乎无法做到这一点


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

我不确定我是否理解;手风琴的全部要点是一次只打开一个窗格,切换代码强制执行该操作。修改该插件以在所有ULs上调用其
activate
helper函数并不难,但当它打开每个窗格时,它将关闭所有其他窗格,从而对自身进行踩踏

此外,您不希望切换所有窗格,因为有些窗格是关闭的,有些窗格是打开的,因此切换每个窗格并不能使它们全局打开或关闭

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

要使其真正切换,请尝试以下操作:

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

Fiddle:

有效激活
是一个私有函数,如果不更改插件代码,您不能从插件外部调用它

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

您现在可以这样称呼它:

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

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

它公开了
activate
,但并不清楚它会做OP想要做的事情,因为
activate
打开一个UL并关闭它的同级ULs。@IsaacCambron很好。我将把它留在这里,因为它回答了如何调用jQuery插件中的方法。不过你说得对,使用非插件Javascript代码可能更好。谢谢,这就是我想要的调用外部函数的方法,(+1)不过最后,为了简化我的代码,我使用了@Isaac Cambron方法。更加友好,谢谢!虽然两人都回答了问题,事实上@Matt的回答更直接地回答了我的原始问题,但你的回答有一个正确的逻辑(我确实想要一个“全局打开并关闭所有”的东西,而不是切换。谢谢。
accordion: function(method, arg1, arg2, arg3) {
    return this.each(function () {
        if (method == "activate") {
            activate(arg1, arg2, arg3);
        }
       // ....
    })
 myAccordion.accordion("activate", $("ul"))