我使用jQuery脚本制作手风琴菜单。除非父元素具有超链接,否则它很有效,在这种情况下,单击它会将用户带到超链接,而不是展开菜单以显示子元素。任何想法如何解决以下代码来解决这个问题?
jQuery脚本:
$( document ).ready( function( ) {
$( '.menu li' ).each( function() {
if( $( this ).children( 'ul' ).length > 0 ) {
$( this ).addClass( 'parent' );
}
});
$( '.menu li.parent > a' ).click( function( ) {
$( this ).parent().toggleClass( 'active' );
$( this ).parent().children( 'ul' ).slideToggle( 'fast' );
});
$( '#all' ).click( function() {
$( '.menu li' ).each( function() {
$( this ).toggleClass( 'active' );
$( this ).children( 'ul' ).slideToggle( 'fast' );
});
});
});
HTML标记:
<div class="menu">
<ul>
<li><a href="http://www.google.com">Menu item 1</a>
<ul>
<li><a>Menu item 1.1</a></li>
<li><a>Menu item 1.2</a>
<ul>
<li><a>Menu item 1.2.1</a></li>
<li><a>Menu item 1.2.2</a></li>
<li><a>Menu item 1.2.3</a></li>
</ul>
</li>
<li><a>Menu item 1.3</a></li>
</ul>
</li>
</ul>
</div>
CSS:
a
{
cursor: pointer;
}
.menu ul
{
list-style: none outside none;
}
.menu li a
{
line-height: 25px;
}
.menu > ul > li > a
{
color: #3B4C56;
display: block;
font-weight: normal;
position: relative;
text-decoration: none;
}
.menu li.parent > a
{
padding: 0 0 0 28px;
}
.menu li.parent > a:before
{
background-image: url("../images/plus_minus_icons.png");
background-position: 25px center;
content: "";
display: block;
height: 21px;
left: 0;
position: absolute;
top: 2px;
vertical-align: middle;
width: 23px;
}
.menu ul li.active > a:before
{
background-position: 0 center;
}
.menu ul li ul
{
border-left: 1px solid #D9DADB;
display: none;
margin: 0 0 0 12px;
overflow: hidden;
padding: 0 0 0 25px;
}
.menu ul li ul li
{
position: relative;
}
.menu ul li ul li:before
{
border-bottom: 1px dashed #E2E2E3;
content: "";
left: -20px;
position: absolute;
top: 12px;
width: 15px;
}
答案 0 :(得分:1)
在点击活动中使用event.preventDefault()
。
来自文档:
例如,单击的锚点不会将浏览器带到新的URL。
答案 1 :(得分:1)
如果链接永远不可点击,你可以试试这样的事情:
$( '.menu li.parent > a' ).click( function( event ) {
event.preventDefault(); //this prevent the Link from redirecting
$( this ).parent().toggleClass( 'active' );
$( this ).parent().children( 'ul' ).slideToggle( 'fast' );
});
如果重定向仍然有效,请添加
window.location.href = $(this).attr('href');
扩展手风琴后。
答案 2 :(得分:1)
您需要做的是阻止使用event.preventDefault()触发锚的默认操作。
$( '.menu li.parent > a' ).click( function( event ) {
event.preventDefault();
$( this ).parent().toggleClass( 'active' );
$( this ).parent().children( 'ul' ).slideToggle( 'fast' );
});