javaScript之事件处理程序
事件就是用户或浏览器自身执行的某个动作,JavaScript与HTML的交互也是通过事件实现的。而相应某个事件的函数就叫做事件处理函数。包括以下几种:
1.HTML事件处理程序
某个元素支持的每种事件,都可以使用一个相应的事件处理程序相同的HTML特性指定。这个特性的值能执行JavaScript代码。
<input type=”button” value=”按钮” onclick=”showMessage()”>
<script>
function showMessage(){
alert(“Hello”)
}
</script>
封装元素属性值的函数有一个局部变量event,也就是事件对象,通过event可以直接访问事件对象。函数内部的this值等于事件的目标元素。该函数可以使用with扩展作用域
function(){
with(document){
//可访问document
with(this){
//可访问该元素本身的属性值
}
}
}
缺点:
(1)存在时差,用户可能在HTML元素刚显示就触发事件,但是当前并不一定具备执行条件,比如JS代码没有下载完成。可以使用try-catch抛出错误。
(2)扩展事件处理程序的作用域链在不同浏览器中会导致不同结果。
(3)HTML代码与JavaScript代码高度耦合。如果需要更换事件处理程序,需要改动两个地方。
2.DOM0级事件处理程序
与HTML事件处理程序相同的是都在元素属性上添加事件处理程序。不同的地方是DOM0级在JavaScript代码中获取元素引用,在引用属性上添加事件处理程序。
<input type=”button” value=”按钮” id="btn">
<script>
var Btn = document.getElementById(“btn”);
Btn.onclick = function(){
alert(“Hello”)
};
</script>
程序中的this引用当前元素的作用域。
删除DOM0级事件
Btn.onclick = null;
3.DOM2级事件处理程序
“DOM2级事件”定义了两个方法,用于指定和删除事件处理程序:addEventListener()和removeEventListener()。它们都接受3个参数:事件名,事件处理程序函数和一个布尔值。最后一个布尔值是true表示在捕获阶段调用事件处理程序,false表示在冒泡阶段调用事件处理程序。第三个参数可选,默认值是false。与DOM0级相同,程序中的this引用当前元素的作用域。
<input type=”button” value=”按钮” id=”btn”>
<script>
var Btn = document.getElementById(“btn”);
Btn.addEventListener(“click”,function(){alert(“Hello”)},false};
</script>
可添加多个事件处理程序,不会被覆盖,从上向下执行。
通过removeEventListener()移除事件处理程序,对于添加的匿名函数无法移除。
4.IE事件处理程序
“IE事件”处理程序用于指定和删除事件处理程序的方法有:attachEvent ()和detachEvent ()。这两个方法接受两个参数:事件处理程序名和事件处理程序函数名。通过attachEvent ()添加的事件默认都会添加到冒泡阶段。
<input type=”button” value=”按钮” id=”btn”>
<script>
var Btn = document.getElementById(“btn”);
Btn.attachEvent(“onclick”,function(){alert(“Hello”)} };
</script>
与DOM0级不同的是,事件处理程序会在全局作用域中运行,即this指向window。
attachEvent ()也可以添加多个事件处理程序,但是执行顺序是自下而上。
5.跨浏览器的事件处理程序
核心视情况的分别处理DOM0级,DOM2级和IE事件处理程序。
Var eventHandler ={
addHandler: function(element, type, handler){
if(element.addEventListener){
element.addEventListener(type, handler, false);
}else if(element.attachEvent){
element. attachEvent (“on”+type, handler);
}else{
element[“on”+type] = handler;
},
removeHandler: function(element, type, handler){
if(element.removeEventListener){
element. removeEventListener(type, handler, false);
}else if(element.detach Event){
element. detach Event (“on”+type, handler);
}else{
element[“on”+type] = null;
}
}
};
eventHandler接受3个参数,分别是要操作元素的引用、事件名和事件处理函数。
调用方法
var Btn = document.getElementById(“btn”);
var handler = function(){
alert(“Hello”)
};
eventHandler. addHandler (Btn, “click”, handler);
removeHandler. addHandler (Btn, “click”, handler);
javaScript之事件处理程序的更多相关文章
- [转]javascript指定事件处理程序包括三种方式:
javascript指定事件处理程序包括三种方式: (1):DOM0级事件处理程序 如: 代码如下: var btn=document.getElementById("mybtn" ...
- JavaScript事件处理程序
JavaScript中的事件处理程序主要分为3种: HTML事件处理程序: <script type="text/javascript"> // HTML事件处理程序 ...
- JavaScript中的事件处理程序
JavaScript和HTML之间的交互是通过事件实现的.事件,就是文档或者浏览器窗口中发生的一些特定的交互瞬间.可以使用事件处理程序来预订事件,以便在事件发生的时候执行响应的代码.这种观察者模式的模 ...
- 浅谈JavaScript的事件(事件处理程序)
事件就是用户或者浏览器自身执行的某种动作.诸如click.load和mouseover,都是事件的名字.而响应某个事件的函数就叫事件处理程序.事件处理程序的名字以"on"开头,比如 ...
- 深入理解DOM事件机制系列第二篇——事件处理程序
× 目录 [1]HTML [2]DOM0级 [3]DOM2级[4]IE[5]总结 前面的话 事件处理程序又叫事件侦听器,实际上就是事件的绑定函数.事件发生时会执行函数中相应代码.事件处理程序有HTML ...
- js 事件处理程序 事件对象
事件:用户或浏览器自身执行的动作: 事件处理程序:响应某个事件的函数: 事件流:从页面中接收事件的顺序. 1.DOM事件流 "DOM2级事件"规定的事件流包括三个阶段:事件捕获阶段 ...
- js事件流、事件处理程序/事件侦听器
1.事件流 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档). 事件捕获 ...
- JavaScript系列----事件机制
1.事件流 1.1.标准事件流 所谓的标准事件流指的的:EMCAScript标准规定事件流包含三个阶段,分别为事件捕获阶段,处于目标阶段,事件冒泡阶段. 下面是一段html代码,根据代码来说明标准事件 ...
- javascript中事件总结&通用的事件侦听器函数封装&事件委托
前言: JAVASCRIPT与HTML之间的交互是通过事件来实现的.事件,就是文档或浏览器窗口中发生的一些特定交互瞬间.可以使用侦听器( 或处理程序 )来预定事件,以便事件发生时执行相应的代码.这种在 ...
随机推荐
- LeetCode:字母异位词分组【16】
LeetCode:字母异位词分组[16] 题目描述 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", &quo ...
- python 3 面向过程编程
python 3 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就像设计好一条工业流水线,是一种机械式的思维方式. 1.优点:程序结构清晰,可以把复杂的问题简单化,流程 ...
- P1393 动态逆序对
题目 P1393 动态逆序对 做题前写篇博客是个好方法 做法 题目规定仅有删除,给每个位置标个号,逆序对+时间轴,显然这是个三维偏序 很久没做过\(cdq\)了,就当模板题讲一下: 按删除的先后顺序为 ...
- curl 监控web
[root@rhel6 ~]# curl -I -s -w "%{http_code}\n" -o /dev/null http://127.0.0.1 [root@rhel6 ~ ...
- hihocoder第七周 完全背包模板题
时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 且说之前的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时刻了! 等等,这段故事为 ...
- 算法(Algorithms)第4版 练习 1.3.4
主要思路: 遇到左括号则一直压栈,遇到右括号时则从栈中弹出一个元素. 如果此时栈为空,则返回false. 如果这个元素与右括号不匹配,则返回false. 重复此过程,最后判断栈是否为空,若为空则返回t ...
- Mac 上Sublime Text 2配置lua环境
1,首先下载最新版lua 然后解压到你想解压到的位置 http://www.lua.org/ftp/ 2,运行终端,cd 进入该文件夹src目录下. 3,在终端输入 make macosx ...
- 十五 Django框架,缓存
由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5 ...
- Python基础-os、sys模块
一,os模块import os ,sysos.system('ipconfig')#执行操作系统命令,获取不到返回结果 os.popen()#也可以执行操作系统命令,可以返回命令执行结果,但需要rea ...
- (转)使用CUnit进行单元测试和覆盖率统计
CUnit安装 如果能联网的话,直接 yum install CUnit-devel.x86_64 就完成安装了,注意要安装devel版本,这样才能找到头文件. 编写单元测试代码 CUnit的测试是单 ...