事件:用户或浏览器自身执行的动作;

事件处理程序:响应某个事件的函数;

事件流:从页面中接收事件的顺序。

1、DOM事件流

"DOM2级事件"规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段。单击<div>元素会按照下图顺序触发事件。

实际的目标(<div>元素)在捕获阶段不会接收到事件,意味着在捕获阶段事件从document到<html>再到<body>后就停止了。在处于目标阶段,事件在<div>上发生,并在事件处理中被看成冒泡阶段的一部分。然后,冒泡阶段发生,事件又传播回文档。

2、事件处理程序

(1)HTML事件处理程序

某个元素支持的每种事件,都可以使用一个与相应事件处理程序同名的HTML特性来指定。这个特性的值应该是能够执行的JavaScript代码。

<input type="button" value="click me" onclick="alert(event.type)">//click
<input type="button" value="button1" onclick="alert(this.value)">//button1 <input type="button" value="click me" onclick="showMessage()">
<script>
function showMessage(){
alert('Hello world');
}
</script>

存在问题:存在时差问题;HTML与JavaScript代码紧密耦合。

(2)DOM0级事件处理程序

通过JavaScript制定事件处理程序的传统方式,是将一个函数赋值给一个事件处理程序属性。每个元素(包括window和document)都有自己的事件处理程序属性。这些属性通常全部小写。

var bt = document.getElementById('myButton');
bt.onclick = function(){
alert(this.id);//DOM0级方法指定的事件处理程序被认为是元素的方法,程序中的this引用当前元素
}
bt.onclick = null;//删除事件处理程序

(3)DOM2级事件处理程序

addEventListener()和removeEventListener()传入的参数相同,意味着addEventListener()添加的匿名函数将无法移除。

var bt1 = document.getElementById('myButton1');
bt1.addEventListener('click', function(){
alert(this.id);
}, false);//false表示在冒泡阶段调用事件处理程序,true表示在捕获阶段调用事件处理程序,大多数情况下是用false
var handler = function(){
alert('hello world');
};
bt1.addEventListener('click', handler, false);
bt1.removeEventListener('click', handler, false);//移除

IE9、Firefox、Chrome、Safari和Opera支持Dom2级事件处理程序。

(4)IE事件处理程序

由于IE8更早版本只支持事件冒泡,attachEvent()添加的事件处理程序会被添加到冒泡阶段。事件处理程序会在全局作用域中运行,这是与Dom0级事件处理程序的主要区别。

var bt1 = document.getElementById('myButton1');
bt1.attachEvent('onclick', function(){
  alert(this == window);//true,事件处理程序会在全局作用域中运行
});
var handler1 = function(){
alert('world');
};
bt1.attachEvent('onclick', handler1);//ie
bt1.detachEvent('onclick', handler1);//移除

支持IE事件处理程序的浏览器有IE和Opera。

3、DOM中的事件(event)对象

var btn = document.getElementById('mybtn');
var handler = function(event){
switch(event.type){
case 'click':
alert('clicked');
event.stopPropagation();//立即停止事件在DOM层次中的传播
break;
case 'mouseover':
event.target.style.backgroundColor = 'red';
break;
case 'mouseout':
event.target.style.backgroundColor = '';
break;
}
} btn.onclick = handler;
btn.onmouseover = handler;
btn.onmouseout = handler; document.body.onclick = function(){
alert('body clicked');
}

最新文章

  1. 移动端常用的meta
  2. android 帧动画的实现及图片过多时OOM解决方案(一)
  3. 细说;(function ($, undefined){ })(jQuery); 的使用
  4. iOS开发-Alpha,Hidden与Opaque区别
  5. linux查找文件命令find
  6. c#桌面小软件
  7. 杭电ACM2084--数塔
  8. 使用c3p0连接池
  9. Shell编程速查手册
  10. git clone 命令报错 +diffie-hellman-group1-sha1
  11. BZOJ 1782: [Usaco2010 Feb]slowdown 慢慢游( BIT + dfs )
  12. HTML语言简单回顾
  13. 数据查找之80-20原则的JavaScript代码实现
  14. Android通过AOP实现防止按钮连续点击
  15. Activity设置全屏显示的两种方式及系统自带theme属性解析
  16. BEGINNING SHAREPOINT&amp;#174; 2013 DEVELOPMENT 第14章节--使用Office Services开发应用程序 Excel Services中新功能
  17. Servlet 浅析
  18. 认识 Linux 文件权限
  19. Fiddler 教程---小坦克
  20. Linux中的文件查找技巧

热门文章

  1. [Asp.net 5] DependencyInjection项目代码分析3-Ninject
  2. 会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载
  3. 一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例)
  4. Android使用SQLite数据库(2)
  5. 字符串-Alphabet
  6. shell脚本集合
  7. Android 手机卫士4--设置中心显示
  8. 当EL遇到char
  9. IIS 7 托管管道模式 经典模式(Classic) 集成模式(Integrated) 分析与理解
  10. SQL SERVER常用定义查询