设置在 jquery 手风琴菜单中打开
set open in jquery accordion menu
我有一个有效的 jquery 手风琴菜单,我从这个 link 中得到了它。
http://perishablepress.com/jquery-accordion-menu-tutorial/#
但随后我打开一个菜单并单击 link,菜单再次关闭。我希望菜单保持打开状态,并且仅在另一个菜单打开时关闭。
抱歉我的英语不好,这是jquery代码
var checkElement = $(this).next();
$('#cssmenu 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'))) {
$('#cssmenu ul ul:visible').slideUp('normal');
checkElement.slideDown('normal');
}
if (checkElement.is('ul')) {
return false;
} else {
return true;
}
实际上问题是当您点击子 li 元素时正在执行容器 li 侦听器,因此总是切换实际状态。
按照您的方法,最简单的解决方法是添加一些 css class 元素,这样您就可以识别单击的元素是根 li 还是子 li。
例如,您可以向子 link 添加一个 class,例如 'sub-link' 以识别它们,然后在侦听器上您只需检查目标元素是否不是子元素link 添加和删除活动 class:
$('#cssmenu li').on('click', function(e){
var $target = $(e.target),
$currentElement = $(this);
if (!$target.hasClass('sub-link') && !$currentElement.hasClass('active')){
var $activeElement = $('#cssmenu li.active');
$activeElement.find('ul').slideUp('normal');
$activeElement.removeClass('active');
$currentElement.addClass('active');
$currentElement.find('ul').slideDown('normal');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="cssmenu">
<ul>
<li><a href="#"><span>Home</span></a></li>
<li><a href="#"><span>Products</span></a>
<ul class='sub-link-list' style='display: none;'>
<li><a class='sub-link' href="#">Widgets</a></li>
<li><a class='sub-link' href="#">Menus</a></li>
<li><a class='sub-link' href="#">Products</a></li>
</ul>
</li>
<li><a href="#"><span>Company</span></a>
<ul class='sub-link-list' style='display: none;'>
<li><a class='sub-link' href="#">About</a></li>
<li><a class='sub-link' href="#">Location</a></li>
</ul>
</li>
<li><a href="#"><span>Contact</span></a></li>
</ul>
</div>
希望对您有所帮助!
试试这个怎么样:
<!-- JS -->
<script type="text/javascript">
$(document).ready(function($) {
$('#accordion').find('.accordion-toggle').click(function(){
//Expand or collapse this panel
$(this).next().slideToggle('fast');
//Hide the other panels
$(".accordion-content").not($(this).next()).slideUp('fast');
});
});
</script>
<!-- CSS -->
.accordion-toggle {cursor: pointer;}
.accordion-content {display: none;}
.accordion-content.default {display: block;}
<!-- HTML -->
<div id="accordion">
<h4 class="accordion-toggle">Accordion 1</h4>
<div class="accordion-content default">
<p>Cras malesuada ultrices augue molestie risus.</p>
</div>
<h4 class="accordion-toggle">Accordion 2</h4>
<div class="accordion-content">
<p>Lorem ipsum dolor sit amet mauris eu turpis.</p>
</div>
<h4 class="accordion-toggle">Accordion 3</h4>
<div class="accordion-content">
<p>Vivamus facilisisnibh scelerisque laoreet.</p>
</div>
</div>
我有一个有效的 jquery 手风琴菜单,我从这个 link 中得到了它。 http://perishablepress.com/jquery-accordion-menu-tutorial/#
但随后我打开一个菜单并单击 link,菜单再次关闭。我希望菜单保持打开状态,并且仅在另一个菜单打开时关闭。
抱歉我的英语不好,这是jquery代码
var checkElement = $(this).next();
$('#cssmenu 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'))) {
$('#cssmenu ul ul:visible').slideUp('normal');
checkElement.slideDown('normal');
}
if (checkElement.is('ul')) {
return false;
} else {
return true;
}
实际上问题是当您点击子 li 元素时正在执行容器 li 侦听器,因此总是切换实际状态。
按照您的方法,最简单的解决方法是添加一些 css class 元素,这样您就可以识别单击的元素是根 li 还是子 li。
例如,您可以向子 link 添加一个 class,例如 'sub-link' 以识别它们,然后在侦听器上您只需检查目标元素是否不是子元素link 添加和删除活动 class:
$('#cssmenu li').on('click', function(e){
var $target = $(e.target),
$currentElement = $(this);
if (!$target.hasClass('sub-link') && !$currentElement.hasClass('active')){
var $activeElement = $('#cssmenu li.active');
$activeElement.find('ul').slideUp('normal');
$activeElement.removeClass('active');
$currentElement.addClass('active');
$currentElement.find('ul').slideDown('normal');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="cssmenu">
<ul>
<li><a href="#"><span>Home</span></a></li>
<li><a href="#"><span>Products</span></a>
<ul class='sub-link-list' style='display: none;'>
<li><a class='sub-link' href="#">Widgets</a></li>
<li><a class='sub-link' href="#">Menus</a></li>
<li><a class='sub-link' href="#">Products</a></li>
</ul>
</li>
<li><a href="#"><span>Company</span></a>
<ul class='sub-link-list' style='display: none;'>
<li><a class='sub-link' href="#">About</a></li>
<li><a class='sub-link' href="#">Location</a></li>
</ul>
</li>
<li><a href="#"><span>Contact</span></a></li>
</ul>
</div>
希望对您有所帮助!
试试这个怎么样:
<!-- JS -->
<script type="text/javascript">
$(document).ready(function($) {
$('#accordion').find('.accordion-toggle').click(function(){
//Expand or collapse this panel
$(this).next().slideToggle('fast');
//Hide the other panels
$(".accordion-content").not($(this).next()).slideUp('fast');
});
});
</script>
<!-- CSS -->
.accordion-toggle {cursor: pointer;}
.accordion-content {display: none;}
.accordion-content.default {display: block;}
<!-- HTML -->
<div id="accordion">
<h4 class="accordion-toggle">Accordion 1</h4>
<div class="accordion-content default">
<p>Cras malesuada ultrices augue molestie risus.</p>
</div>
<h4 class="accordion-toggle">Accordion 2</h4>
<div class="accordion-content">
<p>Lorem ipsum dolor sit amet mauris eu turpis.</p>
</div>
<h4 class="accordion-toggle">Accordion 3</h4>
<div class="accordion-content">
<p>Vivamus facilisisnibh scelerisque laoreet.</p>
</div>
</div>