事件原理

通过div0.addElementListener来调用:
用法:div0.addElementListener(事件类型,事件回调函数,是否捕获时执行){}。
1、事件类型(type):必须是字符串,可以设置为任意字符串,但是部分字符串系统事件类型
2、事件回调函数(onclick) :指向一个函数,当收到事件时执行该函数,如果没有收到不执行函数,写侦听事件时不执行函数
3、是捕获时执行(e):默认值是false,在冒泡时执行,捕获时不执行,如果设置为true,在捕获时执行
4、注意:stopPProgetion():是停止冒泡, IE8以下是不支持的
cancelBubble(): 停止冒泡 IE8以下是支持的

例子:

效果图

当我们点击div2时就会打印出div0、div1、div2,如我们只想打印div0,在其他的两个子元素中添加stoppropagetion().

事件委托:

是将元素的侦听事件全部委托给最外层的元素,也就是我们把子元素要做的事件全部委托给父元素来做。

事件触发:

就是当我们点击元素时,不管我们的子元素有没有点击事件,只要父元素有点击事件,就可以触发子元素的点击事件。

例子:

效果图:

 触发条件:target:被点击的目标元素。和this一样,当我们添加一个触发点击元素时,点击那个元素,target就是这个元素。

委托:概念上是我们要做的事情委托给被人来做,这样不仅可以减少内存,还可以将大大减少dom的操作。

<style>
ul{
transition: all 0.5s;
}
</style> <body>
<ul class="menu">
<li>北京
<ul>
<li>海淀</li>
<li>昌平
<ul>
<li>沙河</li>
<li>回龙观</li>
<li>龙泽</li>
<li>天庭</li>
<li>傻喵</li>
</ul>
</li>
</ul>
</li>
<li>河北</li>
<li>陕西</li>
<li>>河南</li>
<li>北京</li>
</ul> <script> /*
1、先设置ul的样式
2、获取ul的列表
3、给每个列表添加点击事件
4、给要显示的单独列表设置样式,显示或掩藏 */ var list;//设置列表变量 init();//设置初始化函数
function init(){//执行初始化函数
var menu=document.querySelector(".menu");//获取文档中.menu并赋值给menu;
menu.addEventListener("click",clickHandler)//给menn添加点击事件,并执行clickHandler函数 } function clickHandler(e){//执行clickHandler函数
e.stopPropagation();//到达什么样的条件是停止显示
if(e.target.nodeName!=="LI") return;//如e.target等于所有的列表时执行下一语句; ////如上述条件成立,执行下一个子元素
if(e.target.firstElementChild){
if(!e.target.bool){//如为真时,则隐藏,否显示
e.target.firstElementChild.style.display="none";
}else{
e.target.firstElementChild.style.display="block";
}
e.target.bool=!e.target.bool;//获取所想要的效果
} } /* var list;
init();
function init(){
var menu=document.querySelector(".menu");
menu.addEventListener("click",clickHandler)
} function clickHandler(e){
// console.log(this,e.target);//this在事件函数中是被点击的对象(暂时),
// 实际上this是侦听事件的对象,也就是外面执行addEventListener方法的对象menu
// e.target 事件的目标 真实点击到最终得目标对象
// e.currentTarget 和this相同,都是事件侦听的对象
e.stopPropagation();
// this 是被点击的元素
if(e.target.nodeName!=="LI") return;
if(e.target.firstElementChild){
if(!e.target.bool){
e.target.firstElementChild.style.display="none";
}else{
e.target.firstElementChild.style.display="block";
}
e.target.bool=!e.target.bool;
}
} */ </script>
</body>

效果图:

如上述的ul中有多个li,我们只要通过一个ul来触发点击事件,但我们点击Li是,就会触发点击事件。我们点击北京时,北京下的子元素就折叠起来,点击昌平时,昌平下的子元素会折叠

以上仅为日常的分享,如有更好的建议,多多发表喔!!!!!

js世家委托详解的更多相关文章

  1. 《Node.js开发实战详解》学习笔记

    <Node.js开发实战详解>学习笔记 ——持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...

  2. Js apply 方法 详解

    Js apply方法详解 我在一开始看到JavaScript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这 ...

  3. ES6,ES2105核心功能一览,js新特性详解

    ES6,ES2105核心功能一览,js新特性详解 过去几年 JavaScript 发生了很大的变化.ES6(ECMAScript 6.ES2105)是 JavaScript 语言的新标准,2015 年 ...

  4. C#委托详解(3):委托的实现方式大全(续)

    接上篇(C#委托详解(2):实现方式大全),本篇继续介绍委托的实现方式. 4.Action<T>和Func<T>委托 使用委托时,除了为每个参数和返回类型定义一个新委托类型之外 ...

  5. C#委托详解(2):实现方式大全

    本系列文章将详细探讨C#中的委托,列举其主要的实现方式,并分析其在设计层面和编码层面带来的好处,最后会讨论其安全性和执行效率等. 接上篇(C#委托详解(1):什么是委托)介绍完什么是委托之后,来看看C ...

  6. C#事件与委托详解

    from https://www.cnblogs.com/sjqq/p/6917497.html C#事件与委托详解[精华 多看看] Delegatedelegate是C#中的一种类型,它实际上是一个 ...

  7. Js apply()使用详解

    Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这 ...

  8. Js apply方法详解,及其apply()方法的妙用

    Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这 ...

  9. Vue.js 数据绑定语法详解

    Vue.js 数据绑定语法详解 一.总结 一句话总结:Vue.js 的模板是基于 DOM 实现的.这意味着所有的 Vue.js 模板都是可解析的有效的 HTML,且通过一些特殊的特性做了增强.Vue ...

随机推荐

  1. flask-redirect

    flask-redirect from flask import Flask, url_for, request, redirect app = Flask(__name__) @app.route( ...

  2. How to generate entities from database schema using doctrine-orm-module

    1.安装好doctrine,在composer.json中添加如下 "require": { "php": "^5.6 || ^7.0", ...

  3. 第一章 AT&T

    1.一个公司(企业)越庞大,就越危险:越复杂,就越濒临坍塌:快速发展的同时,也埋下了隐患. 2.再庞大的企业也不可能永久站立,下个十年谁也说不准谁会在浪潮之巅. 3.一个人能走多远,往往取决于他能看多 ...

  4. 五个简单的shell脚本

    1.编写shell脚本 ex1.sh,提示用户输入用户名,并判断此用户名是否存在. (提示:利用read.grep和/etc/passwd) #!/bin/bash echo "请输入用户名 ...

  5. Struts2-学习笔记系列(4)-访问servlet api

    5.1通过actioncontext: public String execute() throws Exception { ActionContext ctx = ActionContext.get ...

  6. Linux Mint(Ubuntu)如何管理开机自动启动项?

    Linux Mint自带了一个简洁的开机自启管理应用,使用方法也很简单: 依次点击“Menu”==>“控制中心”==>“个人”==>“启动应用程序”,界面如图所示: 上面打勾的就是系 ...

  7. 新手必须知道的13个Xcode小技巧

    当谈论到iOS开发工具时,有一个肯定是所有iOS开发者都熟悉的,那就是Xcode.Xcode是使所有令人赞叹的iOS app成为可能的驱动力. Xcode能帮助我们完成非常多的事情,但是这也有点让人头 ...

  8. sql 自增序列

    一.使用set identity_insert [database][owner][table]on设置时,要在插入语句中显示列出插入的列;

  9. ado.net 面向对象

    面向对象:就是一个大的转换器,建立起一条通道通往数据库然后通过通道将所需(方法)数据从转换器往返于外部界面端 1   首先在项目里创建文件夹:      右击项目———添加个文件夹App_Cod 2 ...

  10. radio样式

    .radio{ position: relative; border: 1px solid #999; border-radius: 50%; width: 12px; height: 12px; b ...