javascript事件小结(事件处理程序方式)--javascript高级程序设计笔记
1、事件流:描述的是从页面中接收事件的顺序。
2、事件冒泡:IE的事件流叫做事件冒泡,即事件开始从具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到不具体的节点(文档)。
3、事件捕获:指不太具体的节点应该更早接收到事件,而具体的节点应该是最后接收到事件。
4、DOM事件流:“DOM2级事件”规定的事件流包含三个阶段:事件捕获,处于目标阶段和事件冒泡阶段。(实际的目标元素在捕获阶段接不会收到事件)
IE不支持DOM事件流,Opera、safari、chrome、firefox支持事件流。
5、事件处理程序方式有以下几种:
1)HTML事件处理程序:
<input type="text" onclick="alert(1)" />;
<input type="text" onclick="showmessage()" />
<script>
function showmessage(){
alert(1);
}
</script>
这种方式2个缺点:一是当dom元素加载完成,底部js没加载完成时候点击input会报错(这是我理解的精简一句话总结报错);二是js和html代码紧密耦合。若是换事件处理程序,需要改两个地方:HTML和Javascript代码。
2)DOM0级事件处理程序:
就是将一个函数赋值给一个事件的处理程序属性。至今现代为所有浏览器都支持。既简单又款浏览器的优势。属性通常全部小写,例如onclick。将这种属性的值设置为一个函数,就可以指定事件处理程序。如下所示:
<input type="button" id="btn_test" value="测试" />
var oBtn = document.getElementById("btn_test");
oBtn.onclick = function(){
alert(this.id); //btn_test(ps:程序中的this引用当前元素)
}
以这种方式添加的事件处理程序会在事件流的冒泡阶段被处理。
删除通过DOM0级指定的事件处理程序方法,将事件处理程序属性设置为null即可:
btn.onclick = null; //删除时间处理程序
3)DOM2级事件处理程序:
“DOM2级事件”定义了两个方法,用于处理指定和删除事件处理程序的操作:addEventListener()和removeEventListener()。所有DOM几点都包含这两个方法,并且它们接受3个参数:要处理的事件名,作为事件处理的函数和一个布尔值。最后这个布尔值为true,则代表在捕获阶段调用事件处理程序;若为false,表示在冒泡阶段调用时间处理程序。
var oBtn = document.getElementById("btn_test");
function test1(){ console.log("test1") }
oBtn.addEventListener("click",test1,false);//冒泡
移除事件处理程序方法:
oBtn.removeEventListener("click",test1,false);//可以移除,匿名函数是移除不掉的。
大多数情况下将事件处理程序都是添加到事件流的冒泡阶段,这样可以最大限度的兼容各种浏览器。
4)IE事件处理程序:
IE实现了与DOM中类似的两个方法:attachEvent()和detachEvent()。这两个方法接收相同的两个参数,事件处理程序名称和事件处理程序函数。由于IE只支持事件冒泡,所以通过attachEvent()添加的事件处理程序都会被添加到冒泡阶段。
var oBtn = document.getElementById("btn_test");
oBtn.attachEvent("onclick",function(){
alert(this === window); //true
});
var oBtn = document.getElementById("btn_test");
function test1(){ console.log("test1") }
oBtn.attachEvent("onclick",test1);
移除相应的事件处理程序:
oBtn.detachEvent("onclick",test1);
5)跨浏览器的事件处理:
var EventUtil = {
addHandler:function(element, type ,handler){
if (element.addEventListener) { //IE 中
element.addEventListener(type,handler,false);//冒泡
}
else if (element.attachEvent) { //IE 中
element.attachEvent("on"+type,handler);
}
else{
element["on" + type] = handler;
}
},
removeHandler:function(element, type ,handler){
if (element.removeEventListener) { //IE 中
element.removeEventListener(type,handler,false);//冒泡
}
else if (element.detachEvent) { //IE 中
element.detachEvent("on"+type,handler);
}
else{
element["on" + type] = null;
}
}
}
var oBtn = document.getElementById("btn_test");
var handler = function(){
alert(111);
}
EventUtil.addHandler(oBtn,"click",handler);
EventUtil.removeHandler(oBtn,"click",handler);
无论时间处理程序是采用什么方式添加到元素中,如果其他方法无效,则默认采用DOM0级方法。
先写到这里,欢迎转载与转发,请注明出处,若是对您有帮助,麻烦帮忙点一下右下角的支持~~
javascript事件小结(事件处理程序方式)--javascript高级程序设计笔记的更多相关文章
- js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定
js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定 addEventListener()与removeEventListener( ...
- Java高级程序设计笔记 • 【目录】
持续更新中- 我的大学笔记>>> 章节 内容 实践练习 Java高级程序设计作业目录(作业笔记) 第1章 Java高级程序设计笔记 • [第1章 IO流] 第2章 Java高级程序设 ...
- JavaScript高级程序设计笔记 事件冒泡和事件捕获
1.事件冒泡 要理解事件冒泡,就得先知道事件流.事件流描述的是从页面接收事件的顺序,比如如下的代码: <body> <div> click me! </div> & ...
- JavaScript高级程序设计笔记(一)
---恢复内容开始--- 前三章为基础知识,为了方便以后查看,所以比较啰嗦.这里对函数的基本操作没有记录. 1.JavaScript的实现 虽然 JavaScript 和 ECMAScript 通常都 ...
- JavaScript高级程序设计笔记之面向对象
说起面向对象,大部分程序员首先会想到 类 .通过类可以创建许多具有共同属性以及方法的实例或者说对象.但是JavaScript并没有类的概念,而且在JavaScript中几乎一切皆对象,问题来了,Jav ...
- javascript高级程序设计--笔记01
概述 JavaScript的实现包含三个部分: 1 核心(ECMAScript) 提供核心语言功能 2 文档对象模型(DOM) 一套提供了访问以及操作网页内容的API 3 浏览器对象模型( ...
- Javascript高级程序设计笔记 <第五章> 引用类型
一.object类型 创建object实例的方式有两种: //第一种使用new操作符跟构造函数 var person= new Object(); person.name="小王" ...
- Javascript高级程序设计笔记(很重要尤其是对象的设计模式与继承)
var obj = {'a':'a'}; var fun = function (){} console.log(typeof obj);//object console.log(typeof fun ...
- <javascript高级程序设计>笔记
1.要讲一个值转换成其对应的Boolean类型 ,可以调用转型函数Boolean(). var message=“hello world!”; var messageAsBoolean=Boolean ...
随机推荐
- Asp.Net MVC4下设置W3P3(IIS)调试步骤
环境] VS 2012 IIS7.5 [问题] MVC项目在创建时和APS.NET不同,不能够选择服务器类型,不能够直接把项目创建到IIS上. 如果在项目中直接更改属性,更换调试服务器类型,会报错 ...
- Android Service组件(1)
android service 和其他服务一样,并没有实际运行的界面,它运行在android 后台.一般通过service为应用程序提供服务(比如,从Internet下载文件,控制音乐播放器等).Se ...
- windows下使用vnc viewer远程连接Linux桌面(转)
在windows下使用vnc viewer远程连接Linux桌面,主要配置步骤: Linux: 1.rpm -qa vnc //查看是否安装vnc服务,如果没有安装,可以使用yum,或者rpm进行安装 ...
- 多主一从mysql replication同步表的大胆尝试.
能否将不同机器上的不同库中的表同步到同一个机器的同一个库中?表是不同的.而且对于slave这台机子来说,这些表只用来读. 同步不同库的表很简单了,用 replicate-do-table=db_n ...
- easyui跨iframe属性datagrid
1.问题 如何刷新easyui父级tab页中iframe嵌套页中的datagrid? 2.解决方法 (1) parent.$("iframe[title='tabtitle']") ...
- 获得当前设备可用的内存 和 获取当前任务所占用的内存 (单位:MB)(转)
获取当前任务所占的内存: #include <sys/sysctl.h> #include <mach/mach.h> // 任务占用内存 double usedMemory( ...
- 在Linux上怎么安装和配置DenyHosts工具
使用DenyHosts能够进行自动屏ip的功能,掌握DenyHosts在Linux系统中的安装是很有必要的,那么在Linux系统中要如何安装DenyHosts工具呢?安装后又要如何配置呢?这都是用户需 ...
- Unicode其实是Latin1的扩展。只有一个低字节的Uncode字符其实就是Latin1字符——附各种字符编码表及转换表
一.概念 1,ASCII ASCII(American Standard Code for Information Interchange),中文名称为美国信息交换标准代码.是 ...
- Android的多媒体框架OpenCore介绍
网上资料很少, 不过还是找到一个比较详细的说明: 特地在此整理了下: 地址:http://blog.csdn.net/djy1992/article/details/9339787 分为几个阶段: 1 ...
- POJ 1759 Garland(二分答案)
[题目链接] http://poj.org/problem?id=1759 [题目大意] 有n个数字H,H[i]=(H[i-1]+H[i+1])/2-1,已知H[1],求最大H[n], 使得所有的H均 ...