我编写了 jQuery Accordion 的替代方案,因为它没有提供多个开放部分支持(知道为什么他们选择不包括对它的支持吗?那里的历史是什么?)。我对 StackOverflow 以及 Google 做了一些研究,看看其他人提出了哪些其他选择。我需要可以在多个元素上即时使用的东西。
在看到几个解决方案并对其进行试验后,最后,我编写了自己的版本(基于来自http://forum.jquery.com/topic/accordion-multiple-sections-open-at-once的 Kevin 的解决方案,但大量修改的)。
jsFiddle 可以在这里找到:http: //jsfiddle.net/3jacu/1/
内联代码:
$(document).ready(function(){
$.fn.togglepanels = function(){
return this.each(function(){
h4handler = $(this).find("h4");
$(h4handler).prepend('<div class="accordionarrow">▼</div>');
$(h4handler).click(function() {
$(h4handler).toggle(
function() {
barclicked = $(this);
$(barclicked).find(".accordionarrow").html('►');
$(barclicked).next().slideUp('slow');
window.console && console.log('Closed.');
return false;
},
function() {
barclicked = $(this);
$(barclicked).find(".accordionarrow").html('▼');
$(barclicked).next().slideDown('slow');
window.console && console.log('Open.');
return false;
}
);
});
});
};
$("#grouplist").togglepanels(); }
奇怪的是,一旦我将右侧的手风琴箭头粘贴到 jsFiddle 中,它就停止工作,而它在我的本地副本中工作。
无论如何,问题是切换没有按预期工作,当它发生时,它会触发重复的切换事件,导致它关闭、打开,然后最终关闭该部分,并且从那时起它不会打开(它切换打开然后关闭)。那是假设它有效!起初,它不会工作,因为它没有响应。我认为我缺少的地方存在逻辑错误。
根据我在代码中编写/看到的内容,它在给定句柄中搜索相应的标记(在本例中为 h4),并将句柄弹出到变量中。然后它在应用手风琴箭头类(将其浮动到右侧)时将箭头添加到 h4 标记。然后它向它添加一个点击事件,当点击 h4 时,它将在两个函数之间切换(使用 jQuery 的切换函数)。
我怀疑这里的问题是我可能错误地假设 jQuery 的切换功能可以很好地在两个功能之间切换,我必须实现我自己的切换代码。如果我错了,请纠正我!
我正在尝试编写代码,使其尽可能高效,因此也将不胜感激。
提前感谢您的时间、帮助和考虑!