outsideClick 功能,探索

  最近项目中新增了一个功能,需求是一个下拉列表,但是激活元素是 input 标签,对于 uib-dropdown 指令也不难,只是将 button 换成 input 加上 uib-dropdown-toggle 属性标记即可,这不难。

  然而,测试提出了另一个需求,input 框可点击,并且下拉框不闪动,意思就是说点击 input 下拉框不要在展开关闭中切换。这个问题直接就难住我了,因为 uib-dropdown-toggle 属性,会导致点击一次激活属性,就改变一次下拉框的开闭状态。

  而还有一种方法,将 auto-close 设置成 disabled ,同时 uib-dropdown 同级属性加上 is-open 属性来自己控制下拉框的开合,这样做是实现了测试的需求,但同时引出了另一个问题:点击外部不会关闭,因为之前 auto-close 设置的是 outsideClick ,点击除下拉框外的元素都将关闭下拉框。

  因为时间较急,也没仔细看过这个 outsideClick 的实现原理,于是积极找各种方法,寻求新的插件来实现需求,偶然看到了 select2 插件的对 input 下拉框的查询,它巧妙的将 input 放入了下拉框中,这就不会存在点击 激活元素的事件了,于是跟同事商量,改成了这种下拉 input 的实现,插件并没有改变。

  现在功能做完,回想起来这么个事,先想出来个 outsideClick 的实现,以后万一有用呢:

<!DOCTYPE html>
<html ng-app=‘myApp‘>
    <head>
        <meta charset=‘utf-8‘>
        <script src=‘angular.js‘></script>
        <script src=‘jquery-1.11.3.js‘></script>
        <style>
            .div1 {
                border: 1px solid #ddd;
                width: 200px;
                height: 200px;
                margin-left: 40%;
                margin-top: 100px;
                display:inline-block;
                overflow-x:scroll;
            }
            p {
                text-align: center;
            }
        </style>
    </head>
    <body>
        <div ng-controller=‘myCtrl‘>
            <div class=‘div1‘ ng-click="eleClickFnc()">ppppppppppppppppppppppppppppppppppp          ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp</div>
            <p>{{message}}</p>
        </div>
        <script>
            angular.module("myApp",[])
            .controller("myCtrl",function($scope, $document){
                $scope.message = ‘please click anywhere‘;
                $scope.isELeClick = false;
                $scope.eleClickFnc = function () {
                    $scope.isELeClick = true;
                    $scope.message = ‘ele clicked‘;
                    console.log(‘ele‘)
                }
                $document.bind(‘click‘, function () {
                    if(!$scope.isELeClick) {
                        $scope.$apply(function () {
                            $scope.message = ‘body click‘;
                        })
                    }
                    $scope.isELeClick = false;
                    console.log(‘body‘)
                })
            })
        </script>
    </body>
</html>

  主要思路就是监听点击事件啦:

  1、元素自己的事件,可以通过一个开关来控制;

  2、document 的监听,点击元素肯定是先触发的元素事件,这样先改变开关状态,触发到 document 后判断是否点击的是目标元素,再进行相应操作。

  遗留个小问题:点击滚动条居然不算是点击目标元素 @[email protected] ?

时间: 2024-08-26 01:49:26

outsideClick 功能,探索的相关文章

TFS 2015 Update 2功能探索

微软刚刚发布了TFS 2015 update 2的测试包,https://blogs.msdn.microsoft.com/bharry/2016/02/10/team-foundation-server-2015-update-2-rc-1-is-available/. 相对Update 1,这次更新包含了很多用户期待的功能,作者第一时间下载更新了自己的系统,并与大家分享经验. 1. 升级TFS 2015.1到Update 2 Update 2的安装过程与之前的版本一样,安装过程非常简单,加载

Web应用开发工具及语言需要具备的功能探索 - partial

1 前言 最近一个多月在做Web项目,用到的技术有(也不算泄漏公司机密吧): 后台:Struts 2(with JSP/FreeMarker).Spring.Hibernate.MySQL.Web Service(only dubbo interface): 前台:jQuery series: Web服务器:tomcat. 虽然比较厌恶被别人称为做Java Web的,但没有做过的事情还是有挑战性的,一周内几乎天天加班足可以我的态度. 好像有成就感的计算机硕士应该觉得这些活儿是些"平凡"

Docker 1 12新功能探索(9) network基础

docker1.12中的network功能作了一定改进, 但是关于network应该如何使用,docker中的网络模型是如何设计的,当我们在run起来一个container而全然没有意识到network的时候,docker是怎样处理的,在这篇文章中,我们回去尝试一探究竟. docker1.12有关network的特性增加 特性 Built-in Virtual-IP based internal and ingress load-balancing using IPVS Routing Mesh

Docker 1 12新功能探索(7) 服务编排三剑客简单总结

docker内置编排功能和目前成熟的编排工具相比可能还略显弱势,但是毕竟它是docker原生态的工具,占有地利的得天独厚的优势.同时目前内置swarm/node/service"三剑客"所组成的组合也能对普通的编排和应用场景提供足够的支持.本文将对docker1.12中这三小件进行简单总结. docker swarm 操作 详细说明 init 初期化集群 join 以node(worker)或者manager的身份加入集群 join-token 管理join-token update

Docker 1 12新功能探索(8) Remote Api 1 24

Docker的Remote Api并不是1.12才有的,Docker1.12的Remote Api升到了1.24.Remote api的使用在1.12中没有大的变化,稍微大一点的变化是到这个版本之后,二进制文件分裂成了主client的docker以及主server的dockerd了.在centos上通过systemd的配置变化不大,无非是将tcp://ip:port设定到启动的Option中而已,下面来看一下如何设定和简单使用. 事前确认 可以看到只有unix socket的方式 [[email

Docker 1 12新功能探索(4) 1分钟创建集群

在这篇文章里面我们将会通过创建一个极其简单的3个节点的集群来学习一下docker swarm 模式的使用方法.这个1.12版本中最引人关注的部分到底使用的感觉如何.因为没有在大型的生产环境中进行严格的比较,单从研究性质或者小规模的集群的创建的感觉来说和kubernetes的集群创建不相上下,使用方便,在准备妥当的情况下,手速快的朋友1分钟之内完全能够创建完毕. 事前确认 [[email protected] ~]# docker info |egrep 'Manager|Version' WAR

功能类控件

驰骋工作流引擎将出发各种事件的控件称之为功能类控件,驰骋表单设计器中有控件分类:按钮,鼠标.选择,超连接. 按钮 表单上面的按钮对象,可以处理事件内容. 特别说明:ccBPM所有的事件内容的处理方式都是一致的,目前所涉及的事件有,表单事件.按钮事件.流程事件. 1.总体说明 每个按钮有自己的按钮类型,使用自定义按钮类型. 属性 说明 按钮事件类型 事件类型决定按钮执行的内容. 事件内容 就是要执行的内容,内容里面可以有变量,变量来自与表单.变量的表达方式仍然用@+变量名来决定,比如:@jiner

作为产品人,如何更好的应对需求变更?

如何制定一份缜密的项目计划对于产品经理来说可能并不是项目中最难的事情,要应对计划之外的情况,才是最令大家头痛的地方.在项目实际推进过程中,不加控制的需求变更往往给项目带来沉重的负担和无法预料的风险.因此,设计一套合适的需求变更管理流程和规范,对项目和项目经理而言都是不可或缺的. 问题分析 首先对笔者所在项目做一个简单介绍:产品层面,我们是一个C端产品,需求主要来源于运营和策划,就产品阶段而言正处于转型期,现阶段主要以新功能探索为主:项目层面,由于功能较为复杂庞大,可切割空间不大,因此每个版本周期

iOS DLNA编程

iOS DLNA编程 近期实现了iOS下的DLNA,发现ios下的DLNA编程资料很少,其实DLNA文档还好 (28m) ,但是真的确定要看文档自己去实现么? 下面先介绍一下DLNA的基本概念,已经有概念的同学可以跳过,直接看iOS下的DLNA库 什么是DLNA DLNA的全称是DIGITAL LIVING NETWORK ALLIANCE, 其宗旨是Enjoy your music, photos and videos, anywhere anytime, DLNA (Digital Livi