我有一个非常实用的手风琴,来自我在其中一个旧的存档网站上找到的第三方脚本(因此不是我自己的编码)。
http://jsfiddle.net/obmerk99/Rm8Py/1/
现在,我不是一个Javascript人员,而且我想知道如何创建一个全局切换按钮,只需单击一下即可打开/关闭整个设置,从脚本内部调用方法是可能的。 我试着做
jQuery(this).accordion().activate(this, 'toggle', 'parents');
也只是
jQuery('ul').accordion().activate();
但由于我的JS技能接近于NULL,我似乎无法做到这一点......
有没有办法从这个函数中调用一些Inside方法,它将成为所有关卡和手风琴的全局切换触发器,而不必更改插件代码本身?
答案 0 :(得分: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;
});
})();
答案 1 :(得分:1)
activate
实际上是一个私有函数,你无法在不更改插件代码的情况下从插件外部调用它。
要公开它,接受方法名称作为参数是很常见的。 (代码简化,通常更优雅。)
accordion: function(method, arg1, arg2, arg3) {
return this.each(function () {
if (method == "activate") {
activate(arg1, arg2, arg3);
}
// ....
})
您现在可以这样称呼它:
myAccordion.accordion("activate", $("ul"))
插件代码被缩小(单字符变量名),所以我不确定activate
函数期望的参数。