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

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

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

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');
}

js 事件处理程序 事件对象的更多相关文章

  1. IE attachEvent事件处理程序(事件绑定的函数)的this指向的是window不是执行当前事件的dom元素

    IE attachEvent事件处理程序(事件绑定的函数)的this指向的是window不是执行当前事件的dom元素. attachEvent(type,listener); listener函数中的 ...

  2. DOM事件处理程序-事件对象-键盘事件

    事件流: 事件流--描述的是从页面中接受事件的顺序 IE  ---事件冒泡流:即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播至最不具体的那个节点(文档). Netsc ...

  3. js事件流、事件处理程序/事件侦听器

    1.事件流 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档). 事件捕获 ...

  4. 对JavaScript事件处理程序/事件监听器的设定的简单介绍

    下面是一些对事件处理进行设定的方式. 指定为HTML元素的属性(事件处理程序) 指定为DOM元素的属性(事件处理程序) 通过EventTarget.addEventListener()进行指定(事件监 ...

  5. JS——事件流与事件处理程序

    1.事件流:从页面中接收事件的顺序 1.1 IE :事件冒泡流1.2 Netscape :事件捕获1.3 DOM事件流 :事件捕获阶段——事件目标阶段——事件冒泡阶段DOM2级事件规定 :捕获阶段不会 ...

  6. JS事件流与DOM事件处理程序

    在Javascript的DOM中,关于事件Event对象的知识是一定要掌握的.Event对象模型主要分为两个部分,一个是Event对象本身具有的属性和方法,这个参照API就可以学得:另一个是在DOM节 ...

  7. javaScript事件(二)事件处理程序

    一.事件 二.事件流 以上内容见:javaScript事件(一)事件流 三.事件处理程序 前面提到,事件是用户或浏览器自身执行的某种动作,如click,load和mouseover都是事件的名字.响应 ...

  8. 《JS高程》事件学习笔记

    事件:文档或浏览器窗口中发生的一些特定的交互瞬间,也即用户或浏览器自身执行的某种动作. -------------------------------------------------------- ...

  9. Javascript高级编程学习笔记(58)—— 事件(2)事件处理程序

    事件处理程序 事件处理程序即响应某个事件的函数 事件处理程序以 “on” 开头 如“onclick”,“onload” HTML事件处理程序 某个元素支持的每种事件都可以使用一个与响应的事件处理程序同 ...

随机推荐

  1. MEF入门之不求甚解,但力求简单能讲明白(三)

    上一篇我们已经获得了制定类型的实例,但我们还无法对其进行有效的控制. 我们用ExportMetadata属性可以对具体的某个实例做标记,相当于命名.这么理解不知道对否. 在IPart项目中添加一个接口 ...

  2. UWP游戏防内存修改器的方法

    最近我一直在编写适用于Windows 10商店的游戏.这款游戏比较怕玩家用修改器改金钱,因为这种修改会导致某些内购失效并且损害公平性.于是我把自己见过的三种反修改器的方法给网友们介绍一下. 首先说明一 ...

  3. js定时器的使用(实例讲解)

    在javascritp中,有两个关于定时器的专用函数,分别为: 1.倒计定时器:timename=setTimeout("function();",delaytime);2.循环定 ...

  4. LeetCode122:Best Time to Buy and Sell Stock II

    题目: Say you have an array for which the ith element is the price of a given stock on day i. Design a ...

  5. nginx平台初探(100%)

    http://tengine.taobao.org/book/chapter_02.html 初探nginx架构(100%)¶ 众所周知,nginx性能高,而nginx的高性能与其架构是分不开的.那么 ...

  6. mysql 学习笔记 第二天

    插入表格数据: Insert into table_name set columns_1=value1,columns_2=value2,对于没有赋值的列,将会取默认值,并且这个方法只能一次插入一个数 ...

  7. java的spilt(“,”)方法bug处理

    java split方法以逗号分隔如字符串",,,,,," 这样会得到一个空的数组 String str ={1,2,3,,,,, } String[] str1 =spilt(& ...

  8. PostgreSQL除法保留小数

    select round(1::numeric/4::numeric,3);结果为0.25 select round( cast ( 1 as numeric )/ cast( 4 as numeri ...

  9. go的markdown解析库和session库

    最近学习go,就决定做一个博客来练练手,一下是用到的一些不错的库 markdown解析库 使用markdown来写博客文章,我用的是"github.com/russross/blackfri ...

  10. 一个ORM的实现(附源代码)

    1 前言 经过一段时间的编写,终于有出来一个稳定的版本,期间考虑了多种解决方案也偷偷学了下园子里面大神们的作品. 已经有很多的ORM框架,为什么要自己实现一个?我的原因是在遇到特殊需求时,可以在ORM ...