Javascript中的事件,可以和html交互。

事件流
IE&Opera:事件冒泡
其他浏览器: 事件捕获

事件冒泡:事件由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播至最不具体的那个节点(文档)。

事件捕获:不太具体的节点应该更早接收到事件,而最具体的节点应该最后接收到事件。

事件处理程序

1. HTML事件

缺点:

  • HTML和js代码紧密的耦合在一起,
  • 不利于扩展,
  • 只能添加一个事件

2. DOM0 级事件处理程序

把一个函数赋值给一个事件处理程序的属性。
可以添加多个事件处理程序。

3. DOM2 级事件处理程序

DOM2级事件定义了2个方法:
用于处理指定和删除事件处理程序的操作:addEventListener() 和 removeEventListener()
都接收三个参数:要处理的事件名、作为事件处理程序的函数和布尔值(true:表示在事件捕获阶段调用事件处理程序 false:表示事件在事件冒泡阶段调用事件处理程序)。

var btn3 = document.getElementById('btn3');
btn3.addEventListener('click', showMessage, false); // 添加事件 btn3.removeEventListener('click', showMessage, false); // 删除事件

4. IE事件处理程序

attachEvent() 添加事件处理程序
detachEvent() 删除事件处理程序
都接收两个参数:事件处理程序名称和事件处理程序函数
不加第三个参数是因为IE8之前的浏览器只支持事件冒泡。

btn3.attachEvent('onclick', showMessage); // 添加事件处理程序
btn3.detachEvent('onclick', showMessage); // 删除事件处理程序

5. 跨浏览器事件处理程序

使用浏览器能力检测(Browser Compatibility)方法

封装方法:跨浏览器事件处理程序方法封装

var eventUtil = {
// 添加句柄
addHandler: function (element, type, handler) {
if(element.addEventListener){ //DOM2级
element.addEventListener(type, handler, false);
}else if(element.attachEvent){ // DOM0级 IE
element.attachEvent('on' + type, handler);
}else{ // HTML事件
element['on' + type] = handler;
}
}, // 删除句柄
removeHandler: function (element, type, handler) {
if(element.removeEventListener){ //DOM2级
element.removeEventListener(type, handler, false);
}else if(element.detachEvent){ // DOM0级 IE
element.detachEvent('on' + type, handler);
}else{ // HTML事件
element['on' + type] = null;
}
}
}

DOM中的事件对象

在触发DOM上的事件时都会产生一个对象,叫做事件对象。

DOM事件对象event的属性:

1. type属性

用于获取事件类型
如:click

2.target属性

用于获取事件目标
如:target.nodeName

3.stopPropagation()

用于阻止事件冒泡

4. preventDefault()

用于阻止事件的默认行为

IE中的事件对象

1. type 属性

用于获取事件类型

2. srcElement 属性

用于获取事件目标
IE中没有e.target属性,而是 e.srcElement 属性。

所以,js中获取元素最兼容的写法是:

e = event || window.event; // IE8之前使用window.event 传递事件
var element = e.target || e.srcElement;

3. cancelBubble 属性

用于阻止事件冒泡

true:表示阻止事件冒泡
fales:表示不组织事件冒泡

4. returnValue 属性

用于阻止事件的默认行为

false:表示阻止事件的默认行为

继续封装eventUtil

var eventUtil = {
// 添加句柄
addHandler: function (element, type, handler) {
if(element.addEventListener){ //DOM2级
element.addEventListener(type, handler, false);
}else if(element.attachEvent){ // DOM0级 IE
element.attachEvent('on' + type, handler);
}else{ // HTML事件
element['on' + type] = handler;
}
}, // 删除句柄
removeHandler: function (element, type, handler) {
if(element.removeEventListener){ //DOM2级
element.removeEventListener(type, handler, false);
}else if(element.detachEvent){ // DOM0级 IE
element.detachEvent('on' + type, handler);
}else{ // HTML事件
element['on' + type] = null;
}
}, // 获取事件对象
getEvent: function (event) {
return event ? event : window.event;
}, // 获取事件类型
getType: function (event) {
return event.type;
}, // 获取事件目标对象
getElement: function (event) {
return event.target || event.srcElement;
} // 阻止事件的默认行为
preventDefault: function (event) {
if (event.preventDefault) {
event.preventDefaul();
}else{
event.returnValue = false;
}
}, // 阻止冒泡
stopPropagation: function (event) {
if (event.stopPropagation) {
event.stopPropagation();
}else{
event.cancelBubble = true;
}
} }
原出处:http://www.cnblogs.com/fanyong/ 

转 js事件探秘的更多相关文章

  1. js事件探秘

    Javascript中的事件,可以和html交互. 事件流 IE&Opera:事件冒泡 其他浏览器: 事件捕获 事件冒泡:事件由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传 ...

  2. DOM事件探秘

    说到DOM事件,就不得不说以下几点: 1 事件流 事件流:描述的是从页面中接受事件的顺序 事件流分为事件冒泡流和事件捕获流.那么什么是事件冒泡,什么是事件捕获呢? 事件冒泡:即事件最开始由最具体的元素 ...

  3. dynamic-css 动态 CSS 库,使得你可以借助 MVVM 模式动态生成和更新 css,从 js 事件和 css 选择器的苦海中脱离出来

    dynamic-css 使得你可以借助 MVVM 模式动态生成和更新 css,从而将本插件到来之前,打散.嵌套在 js 中的修改样式的代码剥离出来.比如你要做元素跟随鼠标移动,或者根据滚动条位置的变化 ...

  4. 什么是JS事件冒泡?

    什么是JS事件冒泡?: 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理 程序或者事件返回true,那么 ...

  5. js事件技巧方法整合

    window.resizeTo(800,600); //js设置浏览器窗口尺寸 window.open (function(){ resizeTo(640,480);//设置浏览器窗口尺寸 moveT ...

  6. js事件浅析

    js中关于DOM的操作很多,因此js事件机制也就尤为重要. 事件绑定形式: 一. 内联形式 耦合度高,不利于维护 <button onclick="alert('你点击了这个按钮'); ...

  7. js 事件大全

    Js事件大全一般事件 事件 浏览器支持 描述onClick IE3|N2|O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击onDblClick IE4|N4|O 鼠标双击事件onMouseDo ...

  8. 原生JS事件绑定方法以及jQuery绑定事件方法bind、live、on、delegate的区别

    一.原生JS事件绑定方法: 1.通过HTML属性进行事件处理函数的绑定如: <a href="#" onclick="f()"> 2.通过JavaS ...

  9. JS事件

    JS事件:  声明:为了事件对象event跨浏览器兼容: var oEvent==ev||event;      所以在下面用到 event 的地方都用 oEvent 代替  1)doucument的 ...

随机推荐

  1. mfc 类成员函数

    知识点 类成员变量初值 类的构造函数 类成员函数 类成员函数的位置 一.类成员变量初值 二.类的构造函数 构造函数 是一种特殊的方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值. 构造函 ...

  2. 洛谷 1440 求m区间内的最小值

    洛谷  1440 求m区间内的最小值 题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. ...

  3. 10.23 开课一个月零十九天 (PHP数组)

    <?php $s = "he8llo5wor6ld"; $s = preg_replace("/\d/","#",$s); //按照正 ...

  4. 【转载】C++创建对象的两种方法

    原文:http://blog.sina.com.cn/s/blog_586b6c050100dhjg.html 在C++里,有两种方法创建对象: 方法一: ClassName object(param ...

  5. Openstack入门篇(十五)之如何创建生产使用的openstack镜像

    在linux-node1节点上: [root@linux-node1 ~]# yum install -y openstack-nova-compute [root@linux-node1 ~]# y ...

  6. java spring 等启动项目时的异常 或 程序异常的解决思路

    今天搭建ssm项目的时候,因为pagehelper的一个jar包没有导入idea的web项目下的lib目录中,异常报错找不到pagehelper,这个问题在出异常的时候疯狂crash,让人心情十分不舒 ...

  7. springmvc controller转发setViewName时找不到路径的问题以及转发视图时出现找不到样式的问题

    注释掉的部分是错误的写法,@RequestMapping 需要将方法放置在要转发的视图所在目录下,不然视图会找不到样式(无法正确的加载css文件), 如果将方法放在了视图所在目录下,那么 setUie ...

  8. Tomcat部署Web应用

    在Tomcat中部署Web有三种方法: 1,可以将Web应用文件直接复制到webapps目录下,也可以将Web应用打成war包放到webapps目录下,tomcat会自动解开war包,并在webapp ...

  9. springmvc框架开发中解决产生的乱码情况

    一:解决post请求方式产生的乱码情况 示例代码如下: <!-- 解决post乱码 --> <filter> <filter-name>CharacterEncod ...

  10. nodejs 不支持 typescript (...paramName:any[])剩余参数。变相支持方式。

    node es6 变相实现支持ts的剩余参数实现方式 //.ts method assign(to: any, options?: AssignOptions, ...forms: any[]){} ...