学习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组件,使用的过程中,会发现当我们输入内容以后,搜索出来的列表便无法被清空. 针对此种情况我们打算优化一 ... 
随机推荐
- 身为运维的你,怎么掌握python才不会失业
			以前,我们都说Python是运维工程师的未来:现在,为什么大家都说不会Python的运维都将失业?运维必须懂开发,特别是python开发,已经形成大家的共识,不懂开发的运维,路会越走越窄. 而现在的情 ... 
- The Lisp Curse /Lisp魔咒
			The Lisp Curse /Lisp魔咒 http://winestockwebdesign.com/Essays/Lisp_Curse.html 英文出处 http://www.soimort. ... 
- Spring Security 4 新增特性
			1.概述 a) 特性 以下是Spring Security 4.0的新特性 Web Socket 支持 测试支持 整合Spring Data CSRF令牌参数解析 更安全的默认设置 role权限不再必 ... 
- [收藏] Java源码阅读的真实体会
			收藏自http://www.iteye.com/topic/1113732 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我 ... 
- pt-tcp-model
			http://blog.9minutesnooze.com/analyzing-http-traffic-tcpdump-perconas-pttcpmodel/ #获取200k个packets tc ... 
- CSS样式命名整理(非原创)
			非原创,具体出自哪里忘了,如果侵害您的利益,请联系我. CSS样式命名整理 页面结构 容器: container/wrap 整体宽度:wrapper 页头:header 内容:content 页面主体 ... 
- Next week plan
			1.get a job 2.write a high performance chatroom with encryption. Use scala. Next Week turn to Rust 
- CSS实现模糊效果
			HTML代码如下: <body> <h1>body设置了模糊效果</h1> <div id="aa"></div> &l ... 
- 在ERP中定义用户时报错:SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间
			在ERP中定义用户时. 报错: SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间. 原因分析: ①没有正确初 ... 
- hibernate第二天
			hibernate的核心思想就是将之前对单个字段的操作变为操作一个对象,使用了ORM(Object relation mapping)对象关系映射的思想 · 在hibernate中对数据库特殊字段的有 ... 
