【问题标题】:How to display drop down menu with Jquery?如何使用 Jquery 显示下拉菜单?
【发布时间】:2016-12-24 07:47:40
【问题描述】:

我正在使用 jQuery 来显示下拉菜单。它适用于单个菜单并显示正确的下拉菜单。如果我使用了多个菜单,它会显示所有下拉菜单。我知道,我在 jQuery 中传递了同一个类,但是我们如何在多个菜单中使用同一个类。可能吗?

请检查我在 sn-p 中的输出。如果我在 Menu-1 上hover,那么它也会显示 Menu-2 和 Menu-3 下拉菜单。悬停时我必须显示单个下拉菜单。你能帮我用 jQuery 吗?

这是我的sn-p:

$(function() {
$(".menu").hover(
function() { $(".sub").slideToggle(400); },
function() { $(".sub").hide(); }
);
});
a{
text-decoration: none;
}

.menu{
font-family: Arial;
color: #515151;
position: relative;
background-color: #763E9B;
width: 100%;
color: #fff;
}
.menu ul.main-menu{
  list-style: none;
  float: right;
}

.menu li.main-list {
margin: 20px;
float: left;
}

.menu li a{
color: #515151;
display: block;
padding: 10px 15px;
cursor: pointer;
font-size: 14px;
}

.menu ul.sub-options li a:hover{
background: #f44141;
color: #fff;
/*margin: 20px;*/
}

.sub{
background: #fff;
position: absolute;
z-index: 2;
width: 200px;
padding: 10px 0 3px;
border-radius: 3px;
box-shadow: 0 2px 4px #ddd;
border: 1px solid #ddd;
display: none;
}

a.hover-link{

font-size: 14px;
color: #fff;
z-index: 110;
display: block;
padding: 10px 0 1px 10px;
cursor:pointer;
border-radius: 5px 5px 0 0;
font-weight: bold;

}
.sub-options{
list-style:none;
margin:0px;
padding:0px;
font-size: 11px;
}


.square:before {
     content: "";
  position: absolute;
  left: 50%;
  top: -10px;
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 0;
  border-color: transparent transparent #fae0bb transparent;
  z-index: 9999;
  transform: translateX(-50%)
}
.square:after {
    content:"";
    position: absolute;
    right: 4px;
    top: -22px;
    width: 0;
    height: 0;
    border-style: solid;
    border-width: 0 17px 17px 17px;
    border-color: transparent transparent #ffffff transparent;
    z-index:9998;
}
.square {
   background: #fae0bb;
    box-shadow: 0 3px 3px rgba(0, 0, 0, 0.2);
    position: absolute;
    margin: 0;
    /*top: 2.8em;*/
    width: 200px;
    z-index: 99999;
    margin-top: 20px;
}

.menu:hover .square:before{
  border-width: 0 10px 10px 10px;
}
<script src="http://code.jquery.com/jquery-1.8.2.js"></script>

<div class='menu'>
<ul class="main-menu">
<li class="main-list"><a class='hover-link'>Menu 1</a>
<div class="square">
<div class='sub'>
<ul class='sub-options'>
<li><a href='#'>Home</a></li>
<li><a href='#'>About</a></li>
<li><a href='#'>Services</a></li>
<li><a href='#'>Contact</a></li>
</ul>
</div>
</div>
</li>

<li class="main-list"><a class='hover-link'>Menu 2</a>

<div class="square">
<div class='sub'>
<ul class='sub-options'>
<li><a href='#'>Home</a></li>
<li><a href='#'>About</a></li>
<li><a href='#'>Services</a></li>
<li><a href='#'>Contact</a></li>
</ul>
</div>
</div>
</li>

<li class="main-list"><a class='hover-link'>Menu 3</a>
<div class="square">

<div class='sub'>
<ul class='sub-options'>
<li><a href='#'>Home</a></li>
<li><a href='#'>About</a></li>
<li><a href='#'>Services</a></li>
<li><a href='#'>Contact</a></li>
</ul>
</div>
</div>
</li>

</ul>

</div>

【问题讨论】:

  • 您在 .menu 类上使用鼠标悬停。你应该使用不同的类或 id。还有不同的子类。
  • 感谢狮子Leo先生的回复,您能帮我举个例子吗?
  • 一个工作区demo

标签: javascript jquery html css drop-down-menu


【解决方案1】:

您应该使用$(this) 单独定位每个元素。喜欢:

$(function() {
  $(".main-list").hover(
    function() { $(this).find('.sub').slideToggle(400); },
    function() { $(this).find('.sub').hide(); }
  );
});

在结束.menu 之前添加&lt;div class="clear"&gt; 并对其应用clear: both CSS 规则:

HTML:

<div class="menu">
  <ul>...<ul>
  <ul>...<ul>
  <div class="clear"></div>
</div>

CSS:

.clear {
  clear: both;
}

看看下面的sn-p:

$(function() {
  $(".main-list").hover(
    function() { $(this).find('.sub').slideToggle(400); },
    function() { $(this).find('.sub').hide(); }
  );
});
.clear {
  clear: both;
}

a{
	text-decoration: none;
}

.menu{
	font-family: Arial;
	color: #515151;
	position: relative;
	background-color: #763E9B;
	width: 100%;
	color: #fff;
}
.menu ul.main-menu{
	list-style: none;
	float: right;
}

.menu li.main-list {
	margin: 20px;
	float: left;
	position: relative;
}

.menu li a{
	color: #fff;
	display: block;
	padding: 10px 15px;
	cursor: pointer;
	font-size: 14px;
}

.menu ul.sub-options li a {
  color: #151515;
}

.menu ul.sub-options li a:hover{
	background: #f44141;
	color: #fff;
	/*margin: 20px;*/
}

.sub{
	background: #fff;
	position: absolute;
	z-index: 2;
	width: 200px;
	padding: 10px 0 3px;
	border-radius: 3px;
	box-shadow: 0 2px 4px #ddd;
	border: 1px solid #ddd;
	display: none;
}

a.hover-link{

	font-size: 14px;
	color: #fff;
	z-index: 110;
	display: block;
	padding: 10px 0 1px 10px;
	cursor:pointer;
	border-radius: 5px 5px 0 0;
	font-weight: bold;

}
.sub-options{
	list-style:none;
	margin:0px;
	padding:0px;
	font-size: 11px;
}


.square:before {
	content: "";
	position: absolute;
	left: 50%;
	top: -10px;
	width: 0;
	height: 0;
	border-style: solid;
	border-width: 0;
	border-color: transparent transparent #fae0bb transparent;
	z-index: 9999;
	transform: translateX(-50%)
}
.square:after {
	content:"";
	position: absolute;
	right: 4px;
	top: -22px;
	width: 0;
	height: 0;
	border-style: solid;
	border-width: 0 17px 17px 17px;
	border-color: transparent transparent #ffffff transparent;
	z-index:9998;
}
.square {
	background: #fae0bb;
	box-shadow: 0 3px 3px rgba(0, 0, 0, 0.2);
	position: absolute;
	margin: 0;
	left: 50%;
	transform: translateX(-50%);
	/*top: 2.8em;*/
	width: 200px;
	z-index: 99999;
	margin-top: 20px;
}

.main-list:hover .square:before{
	border-width: 0 10px 10px 10px;
}
<script src="http://code.jquery.com/jquery-1.8.2.js"></script>

<div class='menu'>
	<ul class="main-menu">
		<li class="main-list"><a class='hover-link'>Menu 1</a>
			<div class="square">
				<div class='sub'>
					<ul class='sub-options'>
						<li><a href='#'>Home</a></li>
						<li><a href='#'>About</a></li>
						<li><a href='#'>Services</a></li>
						<li><a href='#'>Contact</a></li>
					</ul>
				</div>
			</div>
		</li>

		<li class="main-list"><a class='hover-link'>Menu 2</a>

			<div class="square">
				<div class='sub'>
					<ul class='sub-options'>
						<li><a href='#'>Home</a></li>
						<li><a href='#'>About</a></li>
						<li><a href='#'>Services</a></li>
						<li><a href='#'>Contact</a></li>
					</ul>
				</div>
			</div>
		</li>

		<li class="main-list"><a class='hover-link'>Menu 3</a>
			<div class="square">

				<div class='sub'>
					<ul class='sub-options'>
						<li><a href='#'>Home</a></li>
						<li><a href='#'>About</a></li>
						<li><a href='#'>Services</a></li>
						<li><a href='#'>Contact</a></li>
					</ul>
				</div>
			</div>
		</li>

	</ul>
  <div class="clear"></div>

</div>

希望这会有所帮助!

【讨论】:

  • 不错的一个..我忘记添加 $this。 :)
  • 感谢 Saurav 先生的回复,我的问题得到了 100% 的解决。但我需要更多帮助。我必须显示宽度为 100% 的背景颜色。在 .menu 类中,我添加了背景和宽度,但它不起作用。你能帮我解决这个问题吗?请
  • @NarendraVerma 更新了我的答案。给出背景颜色后,菜单项下方会出现一些箭头,这是因为列表中的:after。看一看。如果这对您有帮助,也不要忘记接受这个答案。
  • 感谢您帮助 Mr.Saurav.Upvote 支持我。为我工作完美。
  • 这是我的荣幸! @NarendraVerma
猜你喜欢
  • 2012-05-27
  • 2013-08-12
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多