JS--JavaScript事件处理基础、事件模型、事件流(冒泡型、捕获型、混合型)、绑定事件(静态绑定和动态绑定)、事件处理函数

JavaScript事件基础

JavaScript与用户之间的交互是通过事件驱动来实现的,事件驱动是面向对象程序设计的重要概念,其核心就是以消息为基础、以事件来驱动(message based, event driven)。当网页对象发生特定事件时,浏览器会自动生成一个事件对象(Event),事件对象通常会沿着DOM节点进行传播,知道被脚本捕获。如果为事件绑定响应程序(事件处理函数),浏览器就会调用该事件处理函数,执行其中的代码,完成预定任务。

事件模式

在浏览器发展历史中,出现4种事件处理模型

  • 基本事件模型
    也成为DOM 0 事件模型,是浏览器初期出现的一种比较简单的事件交互方式,主要通过事件属性,为指定标签绑定事件处理函数。由于这种交互方式应用比较广泛,获得了所有浏览器的支持,目前任然比较流行。但是这种模型对于HTML文档严重依赖,不利于JavaScript独立开发。

  • DOM事件模型
    由W3C制定,是目前标准的事件处理模型。所有符合标准的浏览器都支持该模型,IE怪异模式不支持。DOM事件模型包括DOM2事件模块和DOM3事件模块,DOM3事件模块为DOM2事件模块的升级版,略有完善,主要是新增了一些事情类型,以适应移动设备的开发需要,但大部分规范和用法保持一致。

  • IE事件流
    IE4.0 及其以上版本浏览器支持,与DOM事件模型相似,但用法不同

  • Netscape事件模型
    由Netscape4浏览器实现,在Netscape6中停止支持

事件流

事件流就是多个节点对象对同一种事件进行响应的先后顺序,主要包括3种类型。

  • 冒泡型:
    事件从最特定的目标向最不特定的目标(document对象)触发,也就是事件从下向上进行响应,这个传递过程被形象的称为冒泡

  • 捕获型:
    事件从最不特定的目标(document对象)开始触发,然后到最特定的目标,也就是事件从上向下进行响应

  • 混合型:
    W3C的DOM事件模型支持捕获型和冒泡型两种事件流,但是捕获型事件流先发生,然后才发生冒泡型事件流。两种事件流会触及DOM种的所有层级对象,从document对象开始,最后返回document对象结束。

根据事件流类型,可以把事件传播的整个过程分为3个阶段:

  • 捕获阶段:事件从document对象沿着文档树向下传播到目标节点,如果目标节点的任何一个上级节点注册了相同事件,那么事件在传播过程种就会首先在最接近顶部的上级节点执行,依次向下传播。
  • 目标阶段:注册在目标节点上的事件被执行
  • 冒泡阶段:事件从目标节点向上触发,如果上级节点注册了相同的事件,将会逐级响应,依次向上传播
绑定事件

在基本事件模型中,JavaScript支持两种绑定方式。

1. 静态绑定:
把JavaScript脚本作为属性值,直接赋予给事件属性

<button onclick="alert(‘你单击了一次!’);">按钮</button>

2. 动态绑定:
使用DOM对象的事件属性进行赋值。

<button id="btn">按钮</button>
<script>
	var button = document.getElementById("btn");
	button.onclick = function(){
		alert('你单击了一次!');
	}
</script>
事件处理函数

事件处理函数是一类特殊的函数,主要任务是实现事件处理,为异步调用,由事件触发进行响应。

事件处理函数一般没有明确的返回值,不过在特定事件中,用户可以利用事件处理函数的返回值影响程序的执行,如单击超链接时,禁止默认的跳转行为。

示例:为按钮对象绑定一个单击事件。在事件处理函数中,参数e为形参,响应事件之后,浏览器会把event对象传递给形参变量e,再把event对象作为一个实参进行传递,读取event对象包含的事件信息,在事件处理函数中输出当前源节点名称

<button id="btn">按钮</button>
<script>
var button = document.getElementById("btn");
button.onclick = function(){
	var e = e || window.event;
	document.write(e.srcElement ? e.srcElement : e.target);
}
</script>

注意:IE事件模型和DOM事件模型对于event对象的处理方式不同:

  • IE把event对象定义为window对象的一个属性
  • DOM事件模型把event定义为事件处理函数的默认参数
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值