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 相关文章推荐
javascript背投广告代码的完善
Apr 08 Javascript
JavaScript 滚轮事件使用说明
Mar 07 Javascript
JavaScript小技巧 2.5 则
Sep 12 Javascript
点击进行复制的JS代码实例
Aug 23 Javascript
CSS+jQuery实现的一个放大缩小动画效果
Sep 24 Javascript
微信小程序 PHP后端form表单提交实例详解
Jan 12 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
Feb 12 Javascript
Javascript创建类和对象详解
May 31 Javascript
jQuery的Ajax接收java返回数据方法
Aug 11 jQuery
利用node 判断打开的是文件 还是 文件夹的实例
Jun 10 Javascript
vue 自定义右键样式的实例代码
Nov 06 Javascript
Vue中watch、computed、updated三者的区别及用法
Jul 27 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
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
Vue 实现树形视图数据功能
2018/05/07 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
2019/01/27 jQuery
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
Python实现控制台进度条功能
2016/01/04 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
Django中多种重定向方法使用详解
2019/07/17 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
采购员岗位职责
2013/11/15 职场文书
在校大学生个人的自我评价
2014/02/13 职场文书
售后服务承诺书
2014/03/26 职场文书
宣传工作经验材料
2014/06/02 职场文书
会议邀请函
2015/01/30 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
2015年小学校长工作总结
2015/05/19 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
Minikube搭建Kubernetes集群
2022/03/31 Servers