【问题标题】:delegate jQuery toggle event to the rest of the document将 jQuery 切换事件委托给文档的其余部分
【发布时间】:2014-08-27 07:40:12
【问题描述】:

我在点击时激活了一个下拉菜单。 当您单击 .hello_panel 时,我使用切换来激活它 HTML

<div class="container">
        <div class="login_panel">
            <div class="hello_panel"> 
                <div class="hello_label">Hello </div> 
                <div class="hello_value">foofoo</div> 
            </div> 
        </div>
    </div>

jQuery

$('.hello_panel').bind('click', function(){
   $('.menu_popup').toggle();
})

如果我点击它,它工作正常,它会在 .hello_panel 时显示和隐藏效果 被点击。 我想要的是,如果单击 .hello_panel 并在单击页面上除 .menu_popup 以外的任何其他内容时隐藏回来,则显示它

【问题讨论】:

标签: javascript jquery delegates click toggle


【解决方案1】:

您可以在单击文档时将其隐藏

JavaScript

$(document).click(function () {
    $('.menu_popup:visible').hide();
});

$('.hello_panel').bind('click', function (e) {
    $('.menu_popup').toggle();
    e.stopPropagation();
});

HTML

<div class="container">
    <div class="login_panel">
        <div class="hello_panel">
            <div class="hello_label">Hello</div>
            <div class="hello_value">foofoo</div>
        </div>
    </div>
</div>
<div style="display:none" class="menu_popup">menu_popup</div>

演示 http://jsfiddle.net/6bo1rjrt/16/

如果您不想停止传播,另一种方法是传递一个回调函数,该函数向该文档注册一次单击侦听器以隐藏菜单

$('.hello_panel').bind('click', function () {
    $('.menu_popup').show(function () {
        $(document).one('click', function () {
            $('.menu_popup:visible').hide();
        });
    });
});

演示 http://jsfiddle.net/6bo1rjrt/17/

【讨论】:

  • 这会阻止菜单打开,我在切换后和隐藏后附加了一个 console.log 并将它们一起打印。
  • @RuvenGam 它需要 stopPropagation,我已经更新了代码并添加了一个演示
猜你喜欢
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
相关资源
最近更新 更多