0

我有一个.post-control带有 onClick 事件的 div。点击后,出现一个内部div .post-control-popover。第二次单击后,内部 div 消失。我正在使用的代码:

$('.post-control').click(function(e){

        $(this).toggleClass("active");

    var bool = $('.post-control').hasClass('active');    

             if(bool)
        {
                    $('.post-control-popover').show();
        }
        else
        {
                    $('.post-control-popover').hide();
        }


     e.preventDefault();      
 }); 

我应该在这段代码中添加什么,以便外部 div 外部的 onClick 将使内部 div 消失。

4

5 回答 5

2

尝试

var $pc = $('.post-control'),
    $pcp = $('.post-control-popover');
$pc.click(function (e) {
    $(this).toggleClass("active");
    $pcp.toggle($(this).hasClass('active'));

    $(document).one('click', function () {
        $pc.removeClass("active");
        $pcp.hide()
    })

    return false;
});

演示:小提琴

于 2013-09-24T14:48:40.423 回答
1

您可以为关闭您的整个文档添加一个事件.post-control-popover

$('.post-control').click(function(e){
    $(this).toggleClass("active");
    var bool = $('.post-control').hasClass('active');    

    if(bool)
    {
        $('.post-control-popover').show();
        $(document).one('click', function() {
            $('.post-control-popover').hide();
        });
    }
    else
    {
        $('.post-control-popover').hide();
    }

    e.preventDefault();      
}); 

one方法将侦听器绑定到事件并在一次触发后将其销毁。

于 2013-09-24T14:46:23.220 回答
1
$('.post-control').click(function(e){
    $('.post-control-popover').show();
}); 

$('body').click(function(e){
    e.preventDefault();
    if(e.currentTarget.class != 'post-control-popover') {
        $('.post-control-popover').hide();
    }

})
于 2013-09-24T14:50:09.873 回答
0

您可以以更简单的方式轻松解决它。

$('.post-control').click(function(e){
    $('.post-control-popover').toggleClass('disable');
});

您现在只需向您的 css 添加一个名为“disable”的类,并为其指定 display:none、opacity:0 或 visibility: hidden。

问候提摩太

于 2013-09-24T14:50:54.200 回答
0

或这个:

 $('.post-control').click(function(e){



        $(this).toggleClass("active");

    var if_post_control_active = $('.post-control').hasClass('active');  
        if(if_post_control_active)
        {
                    $('.post-control-popover').show();

 $(document).click(function() {
  $('.post-control-popover').hide();
});
        }
        else
        {
                    $('.post-control-popover').hide();
        }


     e.preventDefault();  
     e.stopPropagation();
 }); 
于 2013-09-24T14:51:14.153 回答