JavaScript学习13:事件绑定

事件绑定分为两种:一种是传统事件绑定(内联模型、脚本模型),一种是现代事件绑定(DOM2级模型)。现代事件绑定在传统绑定的基础上为我们提供了更强大更方便的功能。

传统事件绑定的问题

因为内联模型很少用,这里不做讨论。先来看一下脚本模型,将一个函数赋值给一个事件处理函数。

<span style="font-size:18px;">var box=document.getElementById('box');
box.onclick=function(){
	alert('Lian');
};
box.onclick=function(){
	alert('Jiang');
};</span>

如此绑定事件有很多的问题,具体如下:

1一个事件处理函数触发两次事件,后面的一个会把    前一个完全覆盖掉

<span style="font-size:18px;">box.onclick=toBlue;
function toRed(){
	this.className='red';
	this.onclick=toBlue;
}
function toBlue(){
	this.className='blue';
	this.onclick=toRed;
}</span>

2事件切换器,在进行扩展的时候,会出现三个问题:覆盖,可读性降低、this传递问题。

编写自定义事件处理函数,还有一个问题,那就是两个相同函数名的函数误注册了多次,那么应该把多余的屏蔽掉。这样自定义的话,就比较麻烦了。

W3C事件处理函数

DOM2级事件定义了两个方法,用于添加事件和删除事件处理程序的操作:addEventListener()和removeEventListener()。所有DOM节点中都包含这两个方法,并且它们都接受3个参数:事件名、函数、冒泡或捕获的布尔值(true表示捕获,false表示冒泡)。

<span style="font-size:18px;">window.addEventListener('load',init,false);
window.addEventListener('load',init,false);
function init(){
	alert('Lian');
}</span>

相比较我们自定义的好处有:1不需要自定义了 2 可以屏蔽掉相同的函数 3 可以设置冒泡和捕获。

IE事件处理函数

IE实现了与DOM中类似的两个方法:attachEvent和detachEvent。这两个方法接受相同的参数:事件名和函数。

IE中事件处理函数有很多区别,相对于W3C的DOM而言:1.IE不支持捕获,只支持冒泡 2.IE添加事件不能屏蔽重复的函数;3.IE中的this指向的是window而不是DOM对象;4.在传统事件上,IE是无法接受到event对象的,但是使用了attchEvent之后就可以。

鉴于IE中事件绑定函数有诸多问题,因此在实践中不去使用。

事件对象的其他补充

在W3C中提供了一个属性:relatedTarget,这个属性可以在mouseover和mouseout事件中获取从哪里移入和从哪里移出的DOM对象。

IE提供了两组分别用于 移入移出的属性:fromElement和toElement,分别对应mouseover和mouseout。

<span style="font-size:18px;">function getTarget(evt){
	var e=evt||window.event;
	if(e.srcElement){
		if(e.type=='mouseover'){
			return e.fromElement;
		} else if(e.type=='mouseout'){
			return e.toElement;
		}
	}else if(e.relatedTarget){
		return e.relatedTarget;
	}
}</span>

小结一下:对于JavaScript的事件学习就暂时告一段落了,用了三篇博客对事件进行学习和总结,可见这块的内容是比较重要的,虽然了解了大致的内容,但是对一些细节的东西还没有掌握,期待在以后的项目实践中加以学习和深化。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-25 19:17:50

JavaScript学习13:事件绑定的相关文章

JavaScript学习13 JavaScript中的继承

JavaScript学习13 JavaScript中的继承 继承第一种方式:对象冒充 <script type="text/javascript"> //继承第一种方式:对象冒充 function Parent(username) //父类对象 { this.username = username; //下面的代码最关键的部分就是将子对象的this传递给了父对象 this.sayHello = function() { alert(this.username); } } f

JS学习笔记-事件绑定

一.传统事件模型 传统事件模型中存在局限性. 内联模型以HTML标签属性的形式使用,与HTML混写,这种方式无疑造成了修改以及扩展的问题,已经很少使用了. 脚本模型是将事件处理函数写到js文件中,从页面获取元素进行对应事件函数的绑定以触发执行.但也存在不足之处: 1.一个事件绑定多个事件监听函数,后者将覆盖前者. 2.需要限制重复绑定的情况 3.标准化event对象 二.现代事件绑定 DOM2级事件定义了两个方法用于添加.删除事件:addEventListener().removeEventLi

看懂此文,不再困惑于javascript中的事件绑定、事件冒泡、事件捕获和事件执行顺序

最近一个项目基于3维skyline平台,进行javascript二次开发.对skyline事件的设计真是无语至极,不堪折磨啊!抽空学习了下javascript和jquery的事件设计,收获颇大,总结此贴,和大家分享. (一)事件绑定的几种方式 javascript给DOM绑定事件处理函数总的来说有2种方式:在html文档中绑定.在js代码中绑定.下面的方式1.方式2属于在html中绑定事件,方式3.方式4和方式5属于在js代码中绑定事件,其中方法5是最推荐的做法. 方式1: HTML的DOM元素

JavaScript学习笔记——事件

javascript事件基础和事件绑定 一.事件驱动 1.事件 javascript侦测到的用户的操作或是页面的一些行为(怎么发生的) 2.事件源 引发事件的元素.(发生在谁的身上)3.事件处理程序 对事件处理的程序或是函数 (发生了什么事) 二.事件的分类 1.鼠标事件 onclick ondblclick onmousedowm onmouseup onmousemove onmouseover onmouseout 2.键盘事件 onkeyup onkeydown onkeypress 鼠

【JavaScript学习】-事件响应,让网页交互

什么是事件: JavaScript 创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件. 比如说,当用户单击按钮或者提交表单数据时,就发生一个鼠标单击(onclick)事件,需要浏览器做出处理,返回给用户一个结果. 主要事件表: 事件1:onclick 说明:onclick是鼠标单击事件,当在网页上单击鼠标时,就会发生该事件.同时onclick事件调用的程序块就会被执行,通常与按钮一起使用. 实例代码:

4.Knockout.Js官网学习(事件绑定)

前言 click绑定在DOM元素上添加事件句柄以便元素被点击的时候执行定义的JavaScript 函数.大部分是用在button,input和连接a上,但是可以在任意元素上使用. 简单示例 <h2>ClickBind</h2> <div> You've clicked <span data-bind="text: numberOfClicks"></span> times <button data-bind="

JavaScript学习之事件委托

1 内存和性能 在JavaScript中,添加到页面上的事件处理程序的数量直接关系到页面的整体运行性能: 首先,每个函数都是对象,都会占用内存:内存中的对象越多,性能就越差. 其次,必须事先指定所有事件处理程序,会导致DOM访问次数增加,会延迟整个页面的交互就绪时间. 2 事件委托 事件委托就是事件目标本身不处理事件,而是把处理任务委托给其父元素或祖先元素.事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件. 事件委托解决了"事件处理程序过多"的问题. 假定现

深入学习jQuery事件绑定

× 目录 [1]bind [2]trigger [3]delegate[4]on[5]one 前面的话 javascript有HTML.DOM0级.DOM2级和IE这四种事件处理程序,而jQuery对这四种事件处理程序进行了兼容处理,以更简单的方式就可以实现事件绑定.本文将详细介绍jQuery事件绑定 bind() bind()方法为一个元素绑定事件处理程序,有以下3种使用方法 bind(eventType[,eventData],handler(eventObject)) bind()方法可以

理解Javascript中的事件绑定与事件委托

最近在深入实践js中,遇到了一些问题,比如我需要为动态创建的DOM元素绑定事件,那么普通的事件绑定就不行了,于是通过上网查资料了解到事件委托,因此想总结一下js中的事件绑定与事件委托. 事件绑定   最直接的事件绑定:HTML事件处理程序 如下示例代码,通过节点属性显式声明,直接在HTML中,显式地为按钮绑定了click事件,当该按钮有用户点击行为时,便会触发myClickFunc方法. /* html */ <button id="btn" onclick="myCl