点击空白区域关闭弹出框

点击区域外的空白处隐藏弹出框

最近在做一个搜索框,点击图标可以显示出搜索框,再次点击可以显示选中后的结果,但是点击区域外的空白处也是可以收缩弹出框
大致的样子就是这样


navbar.png
shownavbar.png

在网上搜索的到以下的解决方案

  //点击空白区域隐藏弹出框(全局)
            $(document).click(function(e){

                // 目标区域,点击某个弹出的区域
              var pop = $('#search-navbar');

                if(!pop.is(e.target) && pop.has(e.target).length === 0) {
                    //点击外围区域隐藏弹出框
                    self.isOpen = false;
                    $scope.$evalAsync();
                }else{
                    //点击目标区域不隐藏
                    self.isOpen = true;
                    $scope.$evalAsync();
                }
            });

w3c上这样解释is方法

is() 根据选择器、元素或 jQuery 对象来检测匹配元素集合,如果这些元素中至少有一个元素匹配给定的参数,则返回 true。

if ( $target.is("li,span") ) {
    $target.css("background-color", "red");
  }

这段就是表示点击的要素要么包括li,要么包括span,否则背景不变成红色

w3c上这样解释has方法

has() 将匹配元素集合缩减为拥有匹配指定选择器或 DOM 元素的后代的子集。
如果给定一个表示 DOM 元素集合的 jQuery 对象,.has() 方法用匹配元素的子集来构造一个新的 jQuery 对象。所使用的选择器用于检测匹配元素的后代;如果任何后代元素匹配该选择器,该元素将被包含在结果中。

$('li').has('ul').css('background-color', 'red');

这段只是表示,只有选定的li元素下有ul ,ul是li的后代元素才会使背景色变成红色;

这段代码也相对较好吧,可以试着使用。

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

推荐阅读更多精彩内容

  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 1,385评论 0 8
  • 第一章 入门 基本功能:访问和操作 dom 元素,控制页面样式,对页面的事件处理,与ajax完美结合,有丰富的插件...
    X_Arts阅读 1,069评论 0 2
  • $(”p”).addClass(css中定义的样式类型); 给某个元素添加样式 $(”img”).attr({sr...
    专注寒冰三千岁阅读 515评论 0 4
  • Attribute: $("p").addClass(css中定义的样式类型); 给某个元素添加样式 $("img...
    扑克脸_457e阅读 600评论 0 1
  • 原文链接 http://blog.poetries.top/2016/10/20/review-jQuery 关注...
    前端进阶之旅阅读 16,686评论 18 503