Jquery 将单击事件绑定到运行同一函数的函数中

Jquery 将单击事件绑定到运行同一函数的函数中,jquery,Jquery,基本上,我已经使用jquery创建了一个滑动菜单 请参阅下面的代码 menu_slide = function (e) { e.preventDefault(); if ( menuOpen == false ) { $('.pane').animate({ 'top' : $('#navigation ul').outerHeight() + 'px' }, 250 ); menuOpen = tru

基本上,我已经使用jquery创建了一个滑动菜单

请参阅下面的代码

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