使用 jQuery .on() 制作下拉菜单
我正在尝试制作一个 jQuery 下拉菜单,它添加一个类来了解它是向下还是向上。但由于某种原因 .on() 函数似乎没有响应点击。我做错了什么?
这是我的 HTML:
<ul id="main-menu" class="menu">
<li>
<a href="http://example.com">Item 1</a>
</li>
<li class="drop-down">
<a href="http://example.com">Item 2</a>
<ul class="sub-menu">
<li>
<a href="http://example.com">Sub Item 1</a>
</li>
<li>
<a href="http://example.com">Sub Item 2</a>
</li>
<li>
<a href="http://example.com">Sub Item 3</a>
</li>
</ul>
</li>
<li>
<a href="http://example.com">Item 3</a>
</li>
</ul>
和我的 JS:
// Slide down
jQuery('#main-menu > li.drop-down > a').not('.active a').click(function(e){
e.preventDefault();
jQuery(this).closest('li.drop-down').addClass('active').find('ul.sub-menu').slideDown();
});
// Slide up
jQuery('#main-menu > li.drop-down.active > a').on('click', function(e){
e.preventDefault();
jQuery(this).closest('li.drop-down').find('ul.sub-menu').slideUp(400, function(){
jQuery(this).closest('li.drop-down.active').removeClass('active');
});
});
谢谢!
I'm trying to make a jQuery drop down menu, that adds a class to know if it's down or up. But for some reason the .on() function doesn't seem to respond to clicks. What are I doing wrong?
Here is my HTML:
<ul id="main-menu" class="menu">
<li>
<a href="http://example.com">Item 1</a>
</li>
<li class="drop-down">
<a href="http://example.com">Item 2</a>
<ul class="sub-menu">
<li>
<a href="http://example.com">Sub Item 1</a>
</li>
<li>
<a href="http://example.com">Sub Item 2</a>
</li>
<li>
<a href="http://example.com">Sub Item 3</a>
</li>
</ul>
</li>
<li>
<a href="http://example.com">Item 3</a>
</li>
</ul>
And my JS:
// Slide down
jQuery('#main-menu > li.drop-down > a').not('.active a').click(function(e){
e.preventDefault();
jQuery(this).closest('li.drop-down').addClass('active').find('ul.sub-menu').slideDown();
});
// Slide up
jQuery('#main-menu > li.drop-down.active > a').on('click', function(e){
e.preventDefault();
jQuery(this).closest('li.drop-down').find('ul.sub-menu').slideUp(400, function(){
jQuery(this).closest('li.drop-down.active').removeClass('active');
});
});
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您不需要 2 个处理程序来实现您想要实现的目标。
您可以仅使用一个利用
toggleClass
和slideToggle
jQuery 方法的处理程序。参考文献:.toggleClass()、.slideToggle()
You don't need 2 handlers for what you are trying to achieve.
You can just use one handler making use of
toggleClass
andslideToggle
jQuery methods.References: .toggleClass(), .slideToggle()
为什么不使用 Superfish 插件?
Why not use Superfish plugin?