本篇主要介绍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. HTML 事件(一) 事件的介绍

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

  2. HTML5 localStorage本地存储

    介绍 localStorage(本地存储)的使用方式.包括对存储对象的添加.修改.删除.事件触发等操作. 目录 1. 介绍 1.1 说明 1.2 特点 1.3 浏览器最小版本支持 1.4 适合场景 2 ...

  3. Beanstalkd一个高性能分布式内存队列系统

    高性能离不开异步,异步离不开队列,内部是Producer-Consumer模型的原理. 设计中的核心概念: job:一个需要异步处理的任务,是beanstalkd中得基本单元,需要放在一个tube中: ...

  4. 一个表缺失索引发的CPU资源瓶颈案例

    背景 近几日,公司的应用团队反应业务系统突然变慢了,之前是一直比较正常.后与业务部门沟通了解详情,得知最近生意比较好,同时也在做大的促销活动,使得业务数据处理的量出现较大的增长,最终系统在处理时出现瓶 ...

  5. [BootStrap] 富编辑器,基于wysihtml5

    在我的周围,已经有很多人在使用BootStrap,但对于任何一个带留言.评论.提问.文章编辑功的网站,编辑器永远是重中之重,显然,早期的编辑器完全没考虑过BootStrap的出现,或皮肤跟网站不匹配, ...

  6. .NET面试题集锦②(Part 二)

    一.前言部分 文中的问题及答案多收集整理自网络,不保证100%准确,还望斟酌采纳. 1.实现产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复. ]; ArrayList my ...

  7. python 数据类型 ---文件一

    1.文件的操作流程: 打开(open), 操作(read,write), 关闭(close) 下面分别用三种方式打开文件,r,w,a 模式 . "a"模式将不会覆盖原来的文件内容, ...

  8. Java中用得比较顺手的事件监听

    第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个"监视器",监视着界面的一举一动,一有动静就触发对应的响应. 一.概述 通过对界面的某一或某些操 ...

  9. Android Socket连接PC出错问题及解决

    最近测试问题:Android 通过Socket链接电脑,ip和端口都是正确的,也在同一网段,可android端就是报异常如下: 解决办法:测试电脑的防火墙可能开着,在控制面板把防火墙打开即可.

  10. iOS开源项目周报1222

    由OpenDigg 出品的iOS开源项目周报第二期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开发方面的开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等. io ...