Jquery 将单击事件绑定到运行同一函数的函数中
基本上,我已经使用jquery创建了一个滑动菜单 请参阅下面的代码Jquery 将单击事件绑定到运行同一函数的函数中,jquery,Jquery,基本上,我已经使用jquery创建了一个滑动菜单 请参阅下面的代码 menu_slide = function (e) { e.preventDefault(); if ( menuOpen == false ) { $('.pane').animate({ 'top' : $('#navigation ul').outerHeight() + 'px' }, 250 ); menuOpen = tru
menu_slide = function (e) {
e.preventDefault();
if ( menuOpen == false ) {
$('.pane').animate({
'top' : $('#navigation ul').outerHeight() + 'px'
}, 250 );
menuOpen = true;
$('#top').bind( "click", menu_slide );
} else if ( menuOpen == true ) {
$('#top').unbind("click");
$('.pane').animate({
'top' : 0 + 'px'
}, 250 );
menuOpen = false;
}
}
被这个
$("a.menu-button").on( "click", menu_slide );
现在,当我的菜单打开时,我想将一个单击事件绑定到div#top
,这样div区域就可以作为关闭菜单的按钮。但菜单关闭后,我想将其删除
我想我的使用方法
$('#top').bind( "click", menu_slide );
然后使用
$('#top').unbind("click");
会有预期的效果。但是,当我打开菜单时,它会立即关闭
这都是因为这条线<代码>$('#顶部')。绑定(“单击”,菜单\幻灯片)代码>
有人能告诉我哪里出了问题吗?打开菜单时,有什么理由绑定事件吗?关闭菜单时是否可以单击
$(“#顶部”)
我想你最好从一开始就把它们都绑起来
$('a.menu-button, #top').click(menu_slide);
然后去掉$.bind()
和$.unbind()
调用
由于您已经在检查一个变量以查看菜单是打开还是关闭的,因此单击其中一个应该可以正常工作,并且我假设当菜单关闭时,
#top
元素是隐藏的 听起来像是你的a.menu按钮
元素嵌入了你的div#top
:
<div id='top'>
<a class='menu_button'></a>
<a class='menu_button'></a>
<a class='menu_button'></a>
</div>
或
看
注意,我的演示使用
$.one()
绑定到顶部div。此方法将处理程序绑定到只执行一次的事件,然后自动解除绑定。当您想要处理单个事件,并且不想担心手动解除绑定时,这非常方便。您是否尝试过使用$.one('click',function(){…}
?@bic您的意思是$('#top')。在(“click”,menu-slide)上
-是的,它的作用完全相同,但是它没有意义为什么它马上就关闭了我的意思是$.one()
。这是一个绑定单个执行处理程序的特殊用例。有关详细信息,请参阅下面的答案。工作起来很神奇。确实,你说得对。我只是想复制我的问题。非常感谢你指出并解释这一点。谢谢
return false; // stops propagation AND prevents default
e.stopPropagation(); // stops propagation