学习customEvent
title: 认真学习customEvent
tags: DOM
date: 2017-7-22 23:20:57
最近要实现一个模拟的select元素组件,所以好好看了这个自定义事件api,记录一下。
整体来说,这个api由3部分组成,监听事件的元素,触发事件的元素和event对象.
- 监听事件的元素主要负责监听事件,事件发生了调用回调函数。跟DOM事件一样
- 触发事件的元素负责在一定的条件下触发自定义事件
event
对象,就好像击鼓传花,由事件的触发者传递给事件的监听者,供回调函数使用
这里要注意的是,自定义事件依然符合捕获-目标-冒泡这三个阶段,也就是说,子元素触发的事件,子元素和他的祖先元素可以接收到,而子元素的兄弟元素就算注册了监听事件,等到花儿都谢了,也不会触发回调函数的。。。(我一开始就是这么干的)
下面就通过一个自定义的select事件来说明自定义元素的作用:html结构如下:
<div class='selector'>
<div class='selected'>啥都没选</div>
<div class = 'options'>
<div >1</div>
<div >2</div>
<div >3</div>
<div >4</div>
<div >5</div>
</div>
</div>
在这个例子中,我们希望实现的效果是,点击选项时,会触发select
事件,同时可以在根元素上监听到select
这个自定义事件,js代码如下:
document.querySelector('.options').addEventListener('click', function (evt) {
if (evt.target.classList.contains('options')) {
return;
}
var text = evt.target.innerHTML;
//构造自定义事件
var select = new CustomEvent('select', {
detail: event.target.innerHTML,
bubbles: true//允许冒泡被祖先元素监听到
});
evt.target.dispatchEvent(select)//把select事件抛出去
})
document.querySelector('.selector').addEventListener('select', function (evt){
this.querySelector('.selected').innerHTML = evt.detail;
})
See the Pen NvPjde by imgss (@imgss) on CodePen.
当选项被点击时触发`select`事件,根元素监听到`select`事件之后显示出被选中的选项。有同学会说,这个直接用点击事件不就可以了吗,但是这样写逻辑更清楚
学习customEvent的更多相关文章
- javaScript事件机制深入学习(事件冒泡,事件捕获,事件绑定方式,移除事件方式,阻止浏览器默认行为,事件委托,模拟浏览器事件,自定义事件)
前言 JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间.可以使用侦听器(或处理程序)来预订事件,以便事件发生时执行相应的代码.这种在传统软 ...
- 自定义事件——Event和CustomEvent
之前在学习自定义事件时,在MDN的Event.initEvent()页面顶端有写:该特性已从Web标准中删除,虽然一些浏览器目前仍然支持它,但也许会在未来的某个时间停止支持,请尽量不要使用该特性. 作 ...
- Node基础知识点--学习笔记(一)
一:建立http服务器: 在D盘建立一个文件夹node,放入app.js,代码如下: var http = require('http'); http.createServer(function(re ...
- spring学习12 -Spring 框架模块以及面试常见问题注解等
以下为spring常见面试问题: 1.Spring 框架中都用到了哪些设计模式? Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的: 代理模式—在AOP和remoting中被用的比较 ...
- Qt 学习之路 2(23):自定义事件
Qt 学习之路 2(23):自定义事件 豆子 2012年10月23日 Qt 学习之路 2 21条评论 尽管 Qt 已经提供了很多事件,但对于更加千变万化的需求来说,有限的事件都是不够的.例如, ...
- Qt 学习之路 2(20):event()
Qt 学习之路 2(20):event() 豆子 2012年10月10日 Qt 学习之路 2 43条评论 前面的章节中我们曾经提到event()函数.事件对象创建完毕后,Qt 将这个事件对象传递给QO ...
- Salesforce LWC学习(四) 父子component交互 / component声明周期管理 / 事件处理
我们在上篇介绍了 @track / @api的区别.在父子 component中,针对api类型的变量,如果声明以后就只允许在parent修改,son component修改便会导致报错. sonIt ...
- 转 js自定义事件——Event和CustomEvent
之前在学习自定义事件时,在MDN的Event.initEvent()页面顶端有写:该特性已从Web标准中删除,虽然一些浏览器目前仍然支持它,但也许会在未来的某个时间停止支持,请尽量不要使用该特性. 作 ...
- Salesforce LWC学习(十七) 前端知识之 onclick & onblur & onmousedown
在Salesforce LWC学习(八) Look Up组件实现篇中,我们实现了公用的lookup组件,使用的过程中,会发现当我们输入内容以后,搜索出来的列表便无法被清空. 针对此种情况我们打算优化一 ...
随机推荐
- spring+struts2+hibernate整合
web.xml需要配置 <context-param> <param-name>contextConfigLocation</param-name> <par ...
- Docker安装和卸载
一:卸载旧版本 老版本的Docker被称为docker或docker-engine.如果安装了这些,请卸载它们以及相关的依赖项. $ sudo yum remove docker \ docker-c ...
- C#自动实现Dll(OCX)控件注册的两种方法
尽管MS为我们提供了丰富的.net framework库,我们的程序C#开发带来了极大的便利,但是有时候,一些特定功能的控件库还是需要由第三方提供或是自己编写.当需要用到Dll引用的时候,我们通常会通 ...
- c#关键字及ref和out
最近在写程序时遇到ref,out 参数问题.回头有自习看了看MSDN,才有巩固了基础.我把我的测试程序贴出来,大家分享一下. ref 关键字使参数按引用传递.其效果是,当控制权传递回调用方法时, ...
- python进阶---Python中的socket编程
初识socket编程 一.前言 socket基于C\S架构(客户端\服务端)的编程模型,在Python中是以socket模块存在的. Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是 ...
- python基础-------函数(一)
一 为何要有函数?不加区分地将所有功能的代码垒到一起, 问题是: 代码可读性差 代码冗余 代码可扩展差 如何解决?函数即工具,事先准备工具的过程是定义函数,拿来就用指的就是函数调用 结论:函数使用必须 ...
- Python mysqldb模块
#!/usr/bin/env python2.7 #-*- coding:utf8 -*- import os import sys import logging import MySQLdb fro ...
- TCP网络程序实例——服务器端与客户端交互
实例02 客户端/服务器的交互 实例位置:光盘\Code\SL\14\02 视频位置:光盘\Video\14\ ◆ 服务器端 创建服务器端项目Server,在Main方法中创建TCP连接对象:然后监听 ...
- socket的简单例子
最近刚刚开始学了socket的模块,就写了一个服务器与客户端交互的程序 有两种模式: 1.就是先电脑自动回复 2.就是人工服务 接下来就是代码了 服务器端的代码: #Author:陈浩彬 import ...
- 关于HTML5新手应该知道的几点知识
随着移动互联网的快速发展,HTML5迅速崛起,我们的生活的方方面面都被HTML5渗透着.HTML5在PC端.移动端上均应用广泛,被称为Web的未来.而随着Google正式停止支持Swiffy,HTML ...