本篇主要介绍HTML元素事件的注册、注销的方式。

其他事件文章

1. HTML 事件(一) 事件的介绍

2. HTML 事件(二) 事件的注册与注销

3. HTML 事件(三) 事件流、事件委托

4. HTML 事件(四) 模拟事件操作

目录

1. 注册事件:介绍通过元素的事件属性、addEventListener()以及attachEvent()方法进行事件的注册。

2. 注销事件:介绍通过removeEventListener()、detachEvent()以及事件属性赋值为null来进行事件的注销。

1. 注册事件

注册事件的方式其实有2种:一种属性注册,另一种通过方法注册

属性注册方式又可分为在HTML元素内的事件属性赋值和通过JS指定元素对象的事件属性。

方法注册方式可通过addEventListener()或attachEvent()方法进行事件的注册。

1.1 设置HTML元素属性为事件处理程序

说明:在HTML页面中,设置元素属性为一个函数。

语法:<button onlick="sayHello()">点击</button>

注意:事件属性是以"on"开头,后面跟着事件名称。如:onclick、onload。

示例

JS代码:

function sayHello() {
console.log('hello')
}

HTML代码:

<button onclick="sayHello()">点击</button>

1.2 通过JS设置元素对象的属性为事件处理程序

说明:通过JS获取元素的对象,设置其事件属性为一个事件处理程序。

语法:EventTarget.onEventName=function(e){};

注意:事件属性是以"on"开头,后面跟着事件名称。如:onclick、onload。

唯一性:属性注册具有唯一性;同一个事件,最后注册的处理程序将会覆盖前面注册的处理程序。

示例1:事件属性注册的演示

// 注册body的click事件
document.body.onclick = function (e) {
alert(1);
};

示例2:事件属性注册的唯一性

document.body.onclick=function(e){
console.log(1);
} // 会覆盖前面注册的事件处理程序
document.body.onclick=function(e){
console.log(2);
} document.body.click(); // => 2 :只输出后面属性注册的

1.3 addEventListener()方法注册事件

说明:在JS中,window、document、HtmlElement等对象可以通过addEventListener()方法注册事件的处理程序。

语法:EventTarget.addEventListener(eventName, eventHandler, |useCapture )

参数

①eventName {string} :所要注册的事件名称,不区分大小写。此名称不需要像注册事件属性那样前缀加上"on"。如注册鼠标点击事件,写为click。

②eventHandler {function | function Object} :函数或者函数对象。事件触发时所需要执行的函数;当使用函数对象多次注册同一事件时,只当注册一遍。

③useCapture {boolean} 可选 :是否处于捕获阶段,默认为false。

多次注册:addEventListener()方法能为同一个对象的同一事件注册多次。当发生此事件时,注册的处理事件程序将按照注册先后顺序执行。

注意

①IE9之前的IE的不支持此方法,可使用attachEvent()代替。

②若使用相同的事件处理程序对象多次注册在同一个事件上,只算注册一次。

示例1:多次注册同一事件,按注册顺序执行,先输出1,再输出2

document.body.addEventListener('click',function(e){
console.log('1');
}); document.body.addEventListener('click',function(e){
console.log('2');
}); document.body.click(); // => 1,2

示例2:使用函数对象多次注册同一事件:只当注册一次

function sayHello(){
console.log('hello');
} document.body.addEventListener('click',sayHello);
// 使用处理程序多次注册同一事件,只当注册一次
document.body.addEventListener('click',sayHello); document.body.click(); // => hello :只输出一遍

1.4 attachEvent()方法注册事件

说明:IE9之前的IE版本可通过此方法注册事件。

语法:EventTarget.attachEvent(eventName, eventHandler)

①eventName {string} :所要注册的事件名称,区分大小写。这里的名称跟事件属性一样,以"on"开头,后面跟着事件名称。如:onclick、onload。

②eventHandler {function | function Object} :函数或者函数对象。事件触发时所需要执行的函数;当使用函数对象多次注册同一事件时,可注册多次(addEventListener()方法只当注册一次)。

多次注册:attachEvent()方法能为同一个对象的同一事件注册多次。当触发此事件时,也会依次执行。

示例:

function say(){
console.log('1');
}
document.body.attachEvent('onclick',say);
document.body.attachEvent('onclick',say); // say第二次注册同一事件 document.body.click(); // => 1 1 :输出了2次say函数

1.5 JQuery中的事件注册方式

JQuery中的事件注册方式对多浏览器的差异性进行了解决:判断元素是否含有addEventListener()或者attachEvent()方法。

示例:

function add(element,type, eventHandle){
if (element.addEventListener) {
element.addEventListener(type, eventHandle, false);
} else if (element.attachEvent) {
element.attachEvent("on" + type, eventHandle);
}
}

2. 注销事件

可以注册元素的事件, 相应的可以也注销元素的事件。

JS中,可调用removeEventListener()[对应于addEventListener()] 和detachEvent()[对应于attachEvent()]来注销元素的某个事件指定的处理程序,也可以给事件属性赋值null来注销此事件的所有绑定。

2.1 removeEventListener(eventName, function Object)

说明:注销通过addEventListener()注册的事件处理程序。

语法:EventTarget.removeEventListener(eventName, eventHandlerObj)

参数

①eventName {string} :所要注销的事件名称,不区分大小写。此名称不需要像注册事件属性那样前缀加上"on"。如注册鼠标点击事件,写为click。

②eventHandlerObj {function Object} :函数对象。传入一个函数体是没有效果的。

示例1:通过addEventListener()注销事件

function sayHello(e) {
console.log('1');
} // 注册body click事件
document.body.addEventListener('click', sayHello); // 注销body click事件的sayHello函数
document.body.removeEventListener('click',sayHello); document.body.click(); // 触发click事件,不输出任何结果

示例2:若第二个参数为函数体,将不会注销

function sayHello(e) {
console.log('1');
} // 注册body click事件
document.body.addEventListener('click', sayHello); // 第二个参数为函数体,虽然跟sayHello函数的内容一样,但不会注销
document.body.removeEventListener('click', function(e) {
console.log('1');
}); document.body.click(); // => 1 :输出结果为1,并没有注销成功

  

2.2 detachEvent(eventName, function Object)

说明:注销通过attachEvent()注册的事件处理程序。

语法:EventTarget.detachEvent(eventName, eventHandlerObj)

参数

①eventName {string} :所要注销的事件名称,区分大小写。这里的名称跟事件属性一样,以"on"开头,后面跟着事件名称。如:onclick、onload。

②eventHandlerObj {function Object} ::函数对象。传入一个函数体是没有效果的。

示例1:通过detachEvent()注销事件

function sayHello() {
console.log('1');
}
document.body.attachEvent('onclick', sayHello); document.body.detachEvent('onclick', sayHello); // 注销事件 document.body.click(); // 不输出结果

示例2:若第二个参数为函数体,将不会注销

function sayHello() {
console.log('1');
}
document.body.attachEvent('onclick', sayHello); // 第二个参数为函数体,虽然跟sayHello函数的内容一样,但不会注销
document.body.detachEvent('onclick', function (e) {
console.log('1');
});
document.body.click(); // => 1 :输出结果为1,并没有注销成功

示例3:多次注册与多次注销

因为attachEvent()可以把一个函数对象多次注册到元素同一个事件上,所以调用一次detachEvent()只能注销掉一次。

function sayHello() {
console.log('1');
}
document.body.attachEvent('onclick', sayHello);
document.body.attachEvent('onclick', sayHello); // 注册了2次 document.body.click(); // => 1 1:输出2次 document.body.detachEvent('onclick', sayHello); // 注销1次 document.body.click(); // => 1 :输出结果为1,只注销了1次

2.3 取消事件

给对象的事件属性赋值为null,可取消此事件的所有注册过的处理事件程序。

示例:

document.body.addEventListener('onclick', function(e){
console.log(1);
});
document.body.addEventListener('onclick', function(e){
console.log(2);
}); document.body.onclick=null; // onclick属性赋值为null,相当于注销了onclick事件 document.body.click(); // 无操作
End
菜单加载中...

HTML 事件(二) 事件的注册与注销的更多相关文章

  1. HTML 事件(一) 事件的介绍

    本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...

  2. HTML 事件(三) 事件流与事件委托

    本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...

  3. C#中的事件注册和注销

    C#中的事件注册和注销 由于.NET框架对消息循环机制进行了很好的封装,开发人员不再需要深入的了解Windows事件/消息实现的具体机制,也无需创建复杂的事件结构体和所谓的消息句柄.我们所要做的无非就 ...

  4. C#-WebForm-WebForm开发基础、如何给控件注册事件?——事件委托写法、http无状态性、三层结构

    (小知识 - xml:可扩展的标记语言 html:超文本标记语言) 一.创建WebForm:新建→网站 此时文件夹中只有一个 config 文件,打开后 二.在项目下右键添加新项 在设计页面中打开 从 ...

  5. Lind.DDD.Events事件总线~自动化注册

    回到目录 让大叔兴奋的自动化注册 对于领域事件之前说过,在程序启动时订阅(注册)一些事件处理程序,然后在程序的具体位置去发布(触发)它,这是传统的pub/sub模式的体现,当然也没有什么问题,为了让它 ...

  6. jQuery-委托事件和on方法注册事件

    delegate注册委托事件 delegate--代理.委托 事件代理----事件最终不是由$("#first")执行,它只是代理元素 第一个参数:最终发生事件的元素 第二个参数: ...

  7. WPF路由事件二:路由事件的三种策略

    一.什么是路由事件 路由事件是一种可以针对元素树中的多个侦听器而不是仅仅针对引发该事件的对象调用处理程序的事件.路由事件是一个CLR事件. 路由事件与一般事件的区别在于:路由事件是一种用于元素树的事件 ...

  8. .NET Core 跨平台物联网开发:设置委托事件(二)

    系列教程目录 (一) 连接阿里云IOT (二) 设置委托事件 (三) 上报属性 (四)  SDK文档 属性.方法.委托.类 http://pan.whuanle.cn/index.php?dir=up ...

  9. C#中的委托和事件(二)

    引言 如果你看过了 C#中的委托和事件 一文,我想你对委托和事件已经有了一个基本的认识.但那些远不是委托和事件的全部内容,还有很多的地方没有涉及.本文将讨论委托和事件一些更为细节的问题,包括一些大家常 ...

随机推荐

  1. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  2. NuGet镜像上线试运行

    为解决国内访问NuGet服务器速度不稳定的问题,我们用阿里云服务器搭建了一个NuGet镜像,目前已上线试运行. 使用NuGet镜像源的方法如下: 1)NuGet镜像源地址:https://nuget. ...

  3. 在线浏览PDF之PDF.JS (附demo)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#skill 下载地址:http://mozilla.gith ...

  4. [APUE]文件和目录(上)

    一.文件权限 1. 各种ID 我在读这一章时遇到了各种ID,根据名字完全不清楚什么意思,幸好看到了这篇文章,http://blog.csdn.net/ccjjnn19890720/article/de ...

  5. dubbo服务提供与消费

    一.前言 项目中用到了Dubbo,临时抱大腿,学习了dubbo的简单实用方法.现在就来总结一下dubbo如何提供服务,如何消费服务,并做了一个简单的demo作为参考. 二.Dubbo是什么 Dubbo ...

  6. angular2系列教程(八)In-memory web api、HTTP服务、依赖注入、Observable

    大家好,今天我们要讲是angular2的http功能模块,这个功能模块的代码不在angular2里面,需要我们另外引入: index.html <script src="lib/htt ...

  7. 一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)

    在目前的软件项目中,都会较多的使用到对文档的操作,用于记录和统计相关业务信息.由于系统自身提供了对文档的相关操作,所以在一定程度上极大的简化了软件使用者的工作量. 在.NET项目中如果用户提出了相关文 ...

  8. iOS UITableView 与 UITableViewController

    很多应用都会在界面中使用某种列表控件:用户可以选中.删除或重新排列列表中的项目.这些控件其实都是UITableView 对象,可以用来显示一组对象,例如,用户地址薄中的一组人名.项目地址. UITab ...

  9. Python学习

    Python基础教程        网易云课堂-零基础入门学习Python

  10. 如何用Java类配置Spring MVC(不通过web.xml和XML方式)

    DispatcherServlet是Spring MVC的核心,按照传统方式, 需要把它配置到web.xml中. 我个人比较不喜欢XML配置方式, XML看起来太累, 冗长繁琐. 还好借助于Servl ...