除指定区域外点击任何地方隐藏DIV

html如下:

    <div class="btn" id="btn" onclick="touchMe(this)">btn</div>
    <div class="box"></div>

jquery(法一)如下:

// 如果是用onclick中的方法
funciton touchMe (e) {
    $('.box').show();
    window.event.stopPropagation();
}

// 如果直接触发点击事件
$('.btn').on('click',function(e){
    $('.box').show();
    e.stopPropagation();
})
$('body').on('click',function(){
    $('.box').hide();
})

jquery(法二)如下:

    $('body').click(function(e) {
        var target = $(e.target);

        // 如果#overlay或者#btn下面还有子元素,可使用
        // !target.is('#btn *')
        if(target.is('#btn')){
            $('.box').show();
        }else{
            $('.box').hide();
        }
    });

jquery(法三)如下:

    //判断:当前元素是否是被筛选元素的子元素 
    // jQuery.fn.isChildOf = function(b){ return (this.parents(b).length > 0); }; 

    //判断:当前元素是否是被筛选元素的子元素或者本身 
    jQuery.fn.isChildAndSelfOf = function(b){ return (this.closest(b).length > 0); };
    $(document).click(function(event){ 
        if(!$(event.target).isChildAndSelfOf('#btn')){
            $('.box').hide();
        }
    });

    $('#btn').on('click',function(){
        $('.box').show();
    })

css如下:(随便写)

        .box{
            width:500px;
            height:100px;
            background: pink;
        }
        .btn{
            width:100px;
            height:30px;
            text-align: center;
            line-height: 30px;
            cursor: pointer;
            background: #ff8800;
            border-radius: 3px;
            margin-bottom: 10px;
            color:#fff;
        }

补充:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>点击其它地方关闭DIV</title>
</head>
 
<body>
<input type="text" value="" id="tf"/>
<div style="width:400px; height:200px;border:1px solid #000;display:none" id="con">
     <p>1111</p>
     <p><span>2222</span></p>
     <p><a href="#">3333</a></p>
</div>
<script>
  function e(obj){
    return document.getElementById(obj)
  }
  e('tf').onclick=function(event){
    e('con').style.display='block';
    stopBubble(event); 
    document.onclick=function(){
      e('con').style.display='none';
   document.onclick=null; 
    }
  }
   
  e('con').onclick=function(event){
    //只阻止了向上冒泡,而没有阻止向下捕获,所以点击con的内部对象时,仍然可以执行这个函数
    stopBubble(event); 
  }
  //阻止冒泡函数
  function stopBubble(e){  
    if(e && e.stopPropagation){
      e.stopPropagation();  //w3c
    }else{
      window.event.cancelBubble=true; //IE
    }
  }
</script>
</body>
</html>

demo网址:https://pan.baidu.com/s/1c167Y84

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 通过jQuery,您可以选取(查询,query)HTML元素,并对它们执行“操作”(actions)。 jQuer...
    枇杷树8824阅读 671评论 0 3
  • 原文链接 http://blog.poetries.top/2016/10/20/review-jQuery 关注...
    前端进阶之旅阅读 16,681评论 18 503
  • 一、样式篇 第1章 初识jQuery (1)环境搭建 进入官方网站获取最新的版本 http://jquery.co...
    凛0_0阅读 3,466评论 0 44
  • 今天又是踩点交作业,22:00一分不差,一分不多。这种状态在这次训练营里已经第二次了,而且每次的作业,自己都...
    红日初升江苏阅读 968评论 0 0
  • #幸福是需要修出来的~每天进步1%~幸福实修08班~015-董超-杭州 20170722(34/99) 【幸福三朵...
    julie123阅读 67评论 1 1