转 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的 ...
随机推荐
- 20145234黄斐《网络对抗技术》实验九、Web安全基础实践
PS:我是分了两次做的这次试验,第二次实验的时候电脑出了一点问题熄火了……原本后面的是有图的结果博客没保存图没了…… WebGoat WebGoat是由著名的OWASP负责维护的一个漏洞百出的J2EE ...
- json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
1.json模块常用的四个函数 import json json.load() # 将一个存储在文件中的json对象(str)转化为相对应的python对象 json.loads() # 将一个jso ...
- 处于同一域中的两台SQL Server 实例无法连接
处于同一个域中的两台Sql server 实例无法连接,报的错误信息如下: A network-related or instance-specific error occurred while es ...
- Form,tagName和nodeName的区别
首先介绍DOM里常见的三种节点类型(总共有12种,如docment):元素节点,属性节点以及文本节点,例如<h2 class="title">head</h2&g ...
- centos 7 lsof 安装使用
lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以,lsof的功 ...
- 14-Dockerfile常用指令
下面列出了 Dockerfile 中最常用的指令,完整列表和说明可参看官方文档.FROM 指定 base 镜像. MAINTAINER设置镜像的作者,可以是任意字符串. COPY将文件从 build ...
- OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv::cvtColor
在python用cv2.imread()读取图片的时候一直报错,检查了图片的绝对路径是存在的. 报错的图片用skimage.io.imread()是可以读的. 查了一下,有可能是原图片文件有什么嵌入错 ...
- List集合中的对象进行排序
类A: public class A implements Comparable<A>{ private Integer id; private String name; public A ...
- AlexNet——ImageNet Classification with Deep Convolutional Neural Networks
1. 摘要 本文的模型采用了 5 层的卷积,一些层后面还紧跟着最大池化层,和 3 层的全连接,最后是一个 1000 维的 softmax 来进行分类. 为了减少过拟合,在全连接层采取了 dropout ...
- unzip/tar命令详解
博客目录总纲首页 原文链接:https://www.cnblogs.com/zdz8207/p/3765604.html Linux下的压缩解压缩命令详解及实例 实例:压缩服务器上当前目录的内容为xx ...