转 js事件探秘
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事件探秘的更多相关文章
- js事件探秘
Javascript中的事件,可以和html交互. 事件流 IE&Opera:事件冒泡 其他浏览器: 事件捕获 事件冒泡:事件由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传 ...
- DOM事件探秘
说到DOM事件,就不得不说以下几点: 1 事件流 事件流:描述的是从页面中接受事件的顺序 事件流分为事件冒泡流和事件捕获流.那么什么是事件冒泡,什么是事件捕获呢? 事件冒泡:即事件最开始由最具体的元素 ...
- dynamic-css 动态 CSS 库,使得你可以借助 MVVM 模式动态生成和更新 css,从 js 事件和 css 选择器的苦海中脱离出来
dynamic-css 使得你可以借助 MVVM 模式动态生成和更新 css,从而将本插件到来之前,打散.嵌套在 js 中的修改样式的代码剥离出来.比如你要做元素跟随鼠标移动,或者根据滚动条位置的变化 ...
- 什么是JS事件冒泡?
什么是JS事件冒泡?: 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理 程序或者事件返回true,那么 ...
- js事件技巧方法整合
window.resizeTo(800,600); //js设置浏览器窗口尺寸 window.open (function(){ resizeTo(640,480);//设置浏览器窗口尺寸 moveT ...
- js事件浅析
js中关于DOM的操作很多,因此js事件机制也就尤为重要. 事件绑定形式: 一. 内联形式 耦合度高,不利于维护 <button onclick="alert('你点击了这个按钮'); ...
- js 事件大全
Js事件大全一般事件 事件 浏览器支持 描述onClick IE3|N2|O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击onDblClick IE4|N4|O 鼠标双击事件onMouseDo ...
- 原生JS事件绑定方法以及jQuery绑定事件方法bind、live、on、delegate的区别
一.原生JS事件绑定方法: 1.通过HTML属性进行事件处理函数的绑定如: <a href="#" onclick="f()"> 2.通过JavaS ...
- JS事件
JS事件: 声明:为了事件对象event跨浏览器兼容: var oEvent==ev||event; 所以在下面用到 event 的地方都用 oEvent 代替 1)doucument的 ...
随机推荐
- JavaWeb基础—VerifyCode源码
package com.jiangbei.verifycodeutils; import java.awt.BasicStroke; import java.awt.Color; import jav ...
- 关于使用Tomcat搭建的Web项目,出现 URL 中文乱码的问题解析
URL编码问题 问题描述 使用 Tomcat 开发一个 Java Web 项目的时候,相信大多数人都遇到过url出现中文乱码的情况,绝大多数人为了避免出现这种问题,所以设计 url 一般都会尽量设计成 ...
- mfc 类的析构函数
析构函数 自定义析构函数 一.析构函数 析构函数(destructor) 与构造函数相反,当对象生命周期结束时(例如对象所在的函数已调用完毕),系统自动执行析构函数.析构函数往往用来做“清理善 ...
- P3900 [湖南集训]图样图森破
P3900 [湖南集训]图样图森破 链接 分析: 感觉像个暴力. 可以枚举回文串的回文中心,即枚举一个串,枚举一个串的位置作为回文中心,然后求出这个串内的回文串的长度. 此时如果回文串两端都没有到这个 ...
- tornado-About Web
1.轻量级的web开发框架,没有像django那样的命令行工具,只用于写一些小的脚本 (1)安装tornado包 pip intall tornado # conda install tornado( ...
- 第一章:什么是Linux
Linux可以分为四部分: Linux 内核:系统内存管理,软件程序管理,硬件设备管理和文件系统管理 GNU 工具:除了内核控制硬件系统,操作系统还需要一些工具执行标准功能,比如控制文件和程序.包括核 ...
- Django + Ansible 主机管理(有源码)
本文给大家介绍如何利用 Django + Ansible 进行 Web 项目管理. Django介绍 一个可以使 Web 开发工作愉快并且高效的 Web 开发框架,能够以最小的代价构建和维护高质量 ...
- 按键精灵手机版多点找色,图片对比 by <剑行洪荒> 忠哥
代码: Do Dim ret1,ret2 Delay 500 ret1 = CmpColor(76,72, "153274", 0.9) ret2 = Cm ...
- 一步步实现一个基本的缓存模块·续, 添加Memcached调用实现
jusfr 原创,转载请注明来自博客园. 在之前的实现中,我们初步实现了一个缓存模块:包含一个基于Http请求的缓存实现,一个基于HttpRuntime.Cache进程级的缓存实现,但观察代码,会发现 ...
- TPO-23 C2 Advice on choosing courses
第 1 段 1.Listen to a conversation between a student and his English professor. 请听一段学生与他的英文教授的对话. 第 2 ...