简体   繁体   English

单页中的多个手风琴

[英]Multiple Accordion in single page

I'm trying to use two or more accordion in same page. 我试图在同一页面上使用两个或更多的手风琴。 So right now the first accordion is working however the second doesn't work. 所以现在第一支手风琴正在工作,但第二支手风琴不起作用。

I was wondering missed multiple event. 我想知道错过了多次活动。

Here is my html and js code. 这是我的html和js代码。 Any help highly appreciated. 任何帮助高度赞赏。

 $('#accord > ul > li:has(ul)').addClass("has-sub"); $('#accord > ul > li > a').click(function() { var checkElement = $(this).next(); $('#accord li').removeClass('active'); $(this).closest('li').addClass('active'); if ((checkElement.is('ul')) && (checkElement.is(':visible'))) { $(this).closest('li').removeClass('active'); checkElement.slideUp('normal'); } if ((checkElement.is('ul')) && (!checkElement.is(':visible'))) { $('#accord ul ul:visible').slideUp('normal'); checkElement.slideDown('normal'); } if (checkElement.is('ul')) { return false; } else { return true; } }); 
 <div id='accord'> <ul> <li class="active"> <a href='javascript:void(0)'><span>Accordion</span></a> <ul style="display: block;"> <div class="acc_cont"> //text </div> </ul> </li> <li> <a href='javascript:void(0)'><span>Accordion</span></a> <ul style="display: block;"> <div class="acc_cont"> //text </div> </ul> </li> </ul> </div> <div id='accord'> <ul> <li class="active"> <a href='javascript:void(0)'><span>Accordion</span></a> <ul style="display: block;"> <div class="acc_cont"> //text </div> </ul> </li> <li> <a href='javascript:void(0)'><span>Accordion</span></a> <ul style="display: block;"> <div class="acc_cont"> //text </div> </ul> </li> </ul> </div> 

Your HTML is invalid because of the duplicate id attributes. 由于重复的id属性,您的HTML无效。 They must be unique within a document. 它们在文档中必须是唯一的。 Use classes instead. 请改用类。 Also note that you should reference all elements within the current accordion through DOM traversal methods to stop any events raised in one accordion from affecting any other instance on the page. 另请注意,您应通过DOM遍历方法引用当前手风琴中的所有元素,以阻止一个手风琴中引发的任何事件影响页面上的任何其他实例。 Try this: 尝试这个:

 $('.accord > ul > li:has(ul)').addClass("has-sub"); $('.accord > ul > li > a').click(function() { var $accordion = $(this); var checkElement = $(this).next(); $accordion.find('li').removeClass('active'); $accordion.closest('li').addClass('active'); if ((checkElement.is('ul')) && (checkElement.is(':visible'))) { $accordion.closest('li').removeClass('active'); checkElement.slideUp('normal'); } if ((checkElement.is('ul')) && (!checkElement.is(':visible'))) { $accordion.find('ul ul:visible').slideUp('normal'); checkElement.slideDown('normal'); } if (checkElement.is('ul')) { return false; } else { return true; } }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class='accord'> <ul> <li class="active"> <a href='javascript:void(0)'><span>Accordion</span></a> <ul style="display: block;"> <div class="acc_cont"> //text </div> </ul> </li> <li> <a href='javascript:void(0)'><span>Accordion</span></a> <ul style="display: block;"> <div class="acc_cont"> //text </div> </ul> </li> </ul> </div> <div class='accord'> <ul> <li class="active"> <a href='javascript:void(0)'><span>Accordion</span></a> <ul style="display: block;"> <div class="acc_cont"> //text </div> </ul> </li> <li> <a href='javascript:void(0)'><span>Accordion</span></a> <ul style="display: block;"> <div class="acc_cont"> //text </div> </ul> </li> </ul> </div> 

The id should be unique. id应该是唯一的。 You are using same id for both. 您对两者都使用相同的ID。

You've used duplicate IDs on a single page, which is why you're not able to access both. 您在单个页面上使用了重复的ID,这就是您无法同时访问这两个ID的原因。 Please use class instead of ID. 请使用class而不是ID。

Just replace: 只需更换:

id="accord" with class="accord" and "#accord" with ".accord" id =“accord”with class =“accord”,“#accord”with“.accord”

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM