Jquery下拉菜单。单击时子菜单消失。那么,如何在单击时保留子菜单?

时间:2015-11-19 06:25:34

标签: javascript jquery

我正在使用jquery在单击菜单(成员)时显示子菜单。单击“成员”菜单时,切换工作正常,当我单击子菜单时,它将消失,所以我希望它在单击时保持不变。如何在javascript中执行此操作?...

<html>
<head>
    <title>Dashboard</title>
    <link rel="stylesheet" type="text/css" href="style.css" />
    <script type="text/javascript" src="jquery-1.11.3.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function(e)
        {
            $('.has-sub').click(function(){
                $(this).toggleClass('tap')
            });
        });
    </script>
</head>
<body>
    <header>
        <div class="logo"><a href="#">WORKOUT <span>FITNESS CENTER</span></a></div>
    </header>
    <div id="container">
        <nav>
            <ul>
                <li><a href="#">Walk-In</a></li>
                <li class="has-sub"><a href="#">Members</a>             
                    <ul>
                        <li><a href="#">Subscr</a></li>
                        <li><a href="#">asdasd</a></li>
                        <li><a href="#">asdasd</a></li>
                    </ul>       
                </li>
                <li><a href="#">Sales</a></li>
                <li><a href="#">Inventory</a></li>
                <li><a href="#">Suppliers</a></li>
                <li><a href="#">Reports</a></li>
            </ul>
        </nav>
        <div id="content">
            SOME CONTENT YAY
        </div>
    </div>
</body>
</html>

CSS

@import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,400,300italic,300);
*{
    margin: 0;
    padding: 0;
}
body {
    font-family: 'Open Sans';
}
a{
    text-decoration: none;
}
header{
    width: 100%;
    height: 50px;
    border-bottom: 1px solid #858585;
}
.logo {
    float: left;
    margin-top: 9px;
    margin-left: 15px;  
}
.logo a{
    font-size: 1.3em;
    color: #070807;

}
.logo a span{
    font-weight: 300;
    color: #1AC93A;
}
nav{
    width: 250px;
    height: calc(100% - 50px);
    background-color: #171717;
    float: left;
}
#content {
    width: :auto;
    margin-left: 250px;
    height: calc(100% - 50px);
    padding: 15px
}
nav li{
    list-style: none;

}
nav li a{
    color: #ccc;
    display: block;
    padding: 10px;
    font-size: 0.8em;
    border-bottom: 1px solid #0a0a0a;
    -webkit-transition: 0.2s;
    -moz-transition: 0.2s;
    -o-transition: 0.2s;
    transition: 0.2s;
}
nav li a:hover{
    background-color: #030303;
    color: #fff;
    padding-left: 80px;
}
nav ul li ul {
    display: none;
}
/*nav ul li:hover > ul{
    display: block;

}*/
nav ul li.tap > ul{
    display: block;
}

5 个答案:

答案 0 :(得分:1)

这是因为点击时子项上的事件会向父项冒泡,要停止向子元素添加点击事件并调用e.stopPropagation()以防止冒泡到父.has-sub

$(".has-sub ul").click(function(e){
    e.stopPropagation();
});

Fiddle Example

答案 1 :(得分:0)

从li

向ul添加sub

尝试:

<div id="container">
    <nav>
        <ul>
            <li><a href="#">Walk-In</a>
            </li>
            <li class="has-sub"><a href="#">Members</a> 
                <ul class="sub">
                    <li><a href="#">Subscr</a>
                    </li>
                    <li><a href="#">asdasd</a>
                    </li>
                    <li><a href="#">asdasd</a>
                    </li>
                </ul>
            </li>
            <li><a href="#">Sales</a>
            </li>
            <li><a href="#">Inventory</a>
            </li>
            <li><a href="#">Suppliers</a>
            </li>
            <li><a href="#">Reports</a>
            </li>
        </ul>
    </nav>
    <div id="content">SOME CONTENT YAY</div>
</div>
  $('.has-sub').click(function(e){
       if ($(e.target).parents('.sub').length == 0 ){
        $(this).toggleClass('tap');
       }
    });

jsfiddle:https://jsfiddle.net/v9ynq7og/

答案 2 :(得分:0)

试试这个。我已将id添加到主菜单中,同时单击检查目标ID并基于此,您可以执行适当的操作

>>> template('Hello {{name}}!', name='<b>World</b>')
u'Hello &lt;b&gt;World&lt;/b&gt;!'
>>> template('Hello {{!name}}!', name='<b>World</b>')
u'Hello <b>World</b>!'
$(document).ready(function(e) {
  $('.has-sub').click(function(e) {
    if (e.target.id)
      $(this).toggleClass('tap')
  });

});
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,400,300italic,300);
 * {
  margin: 0;
  padding: 0;
}
body {
  font-family: 'Open Sans';
}
a {
  text-decoration: none;
}
header {
  width: 100%;
  height: 50px;
  border-bottom: 1px solid #858585;
}
.logo {
  float: left;
  margin-top: 9px;
  margin-left: 15px;
}
.logo a {
  font-size: 1.3em;
  color: #070807;
}
.logo a span {
  font-weight: 300;
  color: #1AC93A;
}
nav {
  width: 250px;
  height: calc(100% - 50px);
  background-color: #171717;
  float: left;
}
#content {
  width: : auto;
  margin-left: 250px;
  height: calc(100% - 50px);
  padding: 15px
}
nav li {
  list-style: none;
}
nav li a {
  color: #ccc;
  display: block;
  padding: 10px;
  font-size: 0.8em;
  border-bottom: 1px solid #0a0a0a;
  -webkit-transition: 0.2s;
  -moz-transition: 0.2s;
  -o-transition: 0.2s;
  transition: 0.2s;
}
nav li a:hover {
  background-color: #030303;
  color: #fff;
  padding-left: 80px;
}
nav ul li ul {
  display: none;
}
/*nav ul li:hover > ul{
    display: block;

}*/

nav ul li.tap > ul {
  display: block !important;
}

答案 3 :(得分:0)

我认为你正在寻找这个......

 	$(document).ready(function(e)
    	{
    		$('.test').click(function(e){
    	   if($(this).hasClass("test1"))
             {
               e.stopPropagation();
             }else
               {
                $(this).toggleClass('tap');
               }
         });
    	});
    
**CSS**

    @import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,400,300italic,300);
    *{
    	margin: 0;
    	padding: 0;
    }
    
    body {
    	font-family: 'Open Sans';
    }
    
    a{
    	text-decoration: none;
    }
    
    header{
    	width: 100%;
    	height: 50px;
    	border-bottom: 1px solid #858585;
    }
    
    .logo {
    	float: left;
    	margin-top: 9px;
    	margin-left: 15px; 	
    }
    
    .logo a{
    	font-size: 1.3em;
    	color: #070807;
    	
    }
    .logo a span{
    	font-weight: 300;
    	color: #1AC93A;
    }
    
    nav{
    	width: 250px;
    	height: calc(100% - 50px);
    	background-color: #171717;
    	float: left;
    }
    
    #content {
    	width: :auto;
    	margin-left: 250px;
    	height: calc(100% - 50px);
    	padding: 15px
    }
    
    nav li{
    	list-style: none;
    
    }
    
    nav li a{
    	color: #ccc;
    	display: block;
    	padding: 10px;
    	font-size: 0.8em;
    	border-bottom: 1px solid #0a0a0a;
    	-webkit-transition: 0.2s;
    	-moz-transition: 0.2s;
    	-o-transition: 0.2s;
    	transition: 0.2s;
    }
    
    nav li a:hover{
    	background-color: #030303;
    	color: #fff;
    	padding-left: 80px;
    }
    
    nav ul li ul {
    	display: none;
    }
    
    /*nav ul li:hover > ul{
    	display: block;
    
    }*/
    
    nav ul li.tap > ul{
    	display: block;
    }
<html>
    <head>
    	<title>Dashboard</title>
    	
    	<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    	
    
   

    </head>
    <body>
    
    	<header>
    		<div class="logo"><a href="#">WORKOUT <span>FITNESS CENTER</span></a></div>
    	</header>
    	<div id="container">
    		<nav>
    			<ul>
    				<li><a href="#">Walk-In</a></li>
    				<li class="has-sub test"><a href="#">Members</a>				
     					 <ul>
    						   	<li><a href="#" class='test test1'>Subscr</a></li>
        						<li><a href="#" class='test test1'>asdasd</a></li>
        						<li><a href="#" class='test test1'>asdasd</a></li>
    					  </ul>       
    				</li>
    				<li><a href="#">Sales</a></li>
    				<li><a href="#">Inventory</a></li>
    				<li><a href="#">Suppliers</a></li>
    				<li><a href="#">Reports</a></li>
    			</ul>
    		</nav>
    
    		<div id="content">
    			SOME CONTENT YAY
    		</div>
    	</div>
    
    
    </body>
    </html>

答案 4 :(得分:0)

需要添加jquery函数。

$('.has-sub ul').click(function(){
        return false
    });

以下是您的要求的the status when executing the kernel at k=0