Javascript JS-Jquery-从Jquery插件内部调用方法
我有一个非常实用的手风琴,来自我在一个旧的存档网站上找到的第三方脚本(所以不是我自己的编码) 现在,我不是一个Javascript人,我想知道如何制作一个全局切换按钮,一次点击就能打开/关闭整个集合,从脚本内部调用方法是可能的。。 我试着去做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技能接近于零,我似乎无法做
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"))