JS事件流与事件处理程序实例分析


Posted in Javascript onAugust 16, 2019

本文实例讲述了JS事件流与事件处理程序。分享给大家供大家参考,具体如下:

1.事件流:从页面中接收事件的顺序

1.1 IE :事件冒泡流
1.2 Netscape :事件捕获
1.3 DOM事件流 :事件捕获阶段——事件目标阶段——事件冒泡阶段
DOM2级事件规定 :捕获阶段不会涉及目标事件。

2.事件处理程序

事件 :用户或者浏览器自身执行的 某种动作
事件处理程序 :响应某个事件的 函数 。

2.1 HTML事件处理程序

用一个与该事件处理程序同名的HTML特性来指定。

2.1.1包含要执行的具体动作

<input type="button" value="Click me" onclick="alert('Clicked')"/>

2.1.2 调用其他地方定义的脚本

<input type="button" value="Click me" onclick="showMessage()"/>

2.1.3 缺点

  • 1.时差问题:使用try-catch块捕捉错误。onclick="try { showMessage() ;} catch(ex) {} "
  • 2.程序的作用域链在不同浏览器中会导致不同结果
  • 3.HTML和JS代码耦合紧密

2.2 DOM0级事件处理程序

将一个函数赋值给一个事件处理程序属性,例如:onclick。

为事件处理程序赋值。

btn.onclick = function() {
  alert( this.id );
};

事件处理程序在元素的作用域中运行,this指向当前元素。

删除事件处理程序:

btn.onclick = null;

2.3 DOM2级事件处理程序

addEventListener(处理的事件名,事件处理程序函数,布尔值);

removeEventListener(处理的事件名,事件处理程序函数,布尔值);

布尔值:捕获阶段调用事件处理程序:true。冒泡阶段调用:false。大多数情况下用false。

btn.addEventListener("click" , function() {
  alert(this.id);
}, false);

好处:可以添加多个事件处理程序。事件按照添加先后顺序执行。

问题:匿名函数无法移除。

最好写成

var handler = function(){
  alert(this.id);
};
btn.addEventListener("click", handler, false);
btn.removeEventListener("click", handler, false);

2.4 IE事件处理程序

attachEvent(事件处理程序名称,事件处理程序函数);
detachEvent(事件处理程序名称,事件处理程序函数);

通过该方法添加的事件处理程序,都会被添加到冒泡阶段。

btn.attachEvent("onclick",function(){
  alert("clicked");
});

注意:使用DOM级方法时,事件会在所属元素的作用域内运行;使用attachEvent()方法,事件处理程序会在全局作用域运行,this==window。

好处:可以添加多个事件处理程序。后添加先执行。

问题:匿名函数无法移除。

var handler = function(){
  alert(this.id);
};
btn.attachEvent ("onclick", handler);
btn.detachEvent ("onclick", handler);

2.5跨浏览器事件处理程序

  • 1.创建一个方法addHandler():区分使用哪种方法来添加事件;
  • 2.创建一个对象EventUtil。拥有两个方法。
  • 3.addHandler(要操作的元素,事件名称,事件处理函数)。
  • 4.removeHandler(要操作的元素,事件名称,事件处理函数)。
var EventUtil = {
  addHandler: function(element,type,handler){
    if(element.addEventLister) {
      element.addEventListener(type,handler,false);
    } else if(element.attachEvent) {
      element.attachEvent("on"+type, handler);
    }else {
      element.["on"+type] =handler;
    }
  },
  removeHandler: function(element,type,handler){
    if(element.addEventLister) {
      element.removeEventListener(type,handler,false);
    } else if(element.attachEvent) {
      element.detachEvent("on"+type, handler);
    }else {
      element.["on"+type] = null;
    }
  }
};

使用:

EventUtil.addHandler(btn ,"click",handler);
EventUtil.removeHandler(btn ,"click",handler);

PS:这里再为大家附上javascript系统自带事件参考表供大家参考查询:

javascript事件与功能说明大全:
http://tools.3water.com/table/javascript_event

更多关于JavaScript相关内容可查看本站专题:《JavaScript事件相关操作与技巧大全》、《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
多种方式实现JS调用后台方法进行数据交互
Aug 20 Javascript
密码框显示提示文字jquery示例
Aug 29 Javascript
jquery事件与函数的使用介绍
Sep 29 Javascript
javascript实用小函数使用介绍
Nov 11 Javascript
jquery实现checkbox 全选/全不选的通用写法
Feb 22 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
Apr 10 Javascript
AngularJS 模块详解及简单实例
Jul 28 Javascript
React router动态加载组件之适配器模式的应用详解
Sep 12 Javascript
微信小程序使用字体图标的方法
May 23 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
Aug 08 jQuery
JS代码检查工具ESLint介绍与使用方法
Feb 04 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
Feb 15 Javascript
javascript事件监听与事件委托实例详解
Aug 16 #Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
Aug 16 #Javascript
详解Vue中组件传值的多重实现方式
Aug 16 #Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
Aug 16 #Javascript
JavaScript JSON数据处理全集(小结)
Aug 15 #Javascript
JointJS JavaScript流程图绘制框架解析
Aug 15 #Javascript
基于vue写一个全局Message组件的实现
Aug 15 #Javascript
You might like
MySQL数据源表结构图示
2008/06/05 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
PHP实现的AES加密、解密封装类与用法示例
2018/08/02 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
使用JS读取XML文件的方法
2016/11/25 Javascript
js实现分页功能
2017/05/24 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
opencv 识别微信登录验证滑动块位置
2018/08/07 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
用Vue编写抽象组件的方法
2019/05/06 Javascript
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
2020/06/29 Javascript
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
python实现控制COM口的示例
2019/07/03 Python
Python控制台实现交互式环境执行
2020/06/09 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
Python如何解除一个装饰器
2020/08/07 Python
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
护士个人简历自荐信
2013/10/18 职场文书
企业项目策划书
2014/01/11 职场文书
员工激励培训演讲稿
2014/09/16 职场文书
2015年挂职干部工作总结
2015/05/14 职场文书
如何写新闻稿
2015/07/18 职场文书
高中英语教学反思范文
2016/03/02 职场文书
Java Dubbo框架知识点梳理
2021/06/26 Java/Android