js事件(十二)
一、事件三要素
1、事件目标【谁触发的该事件(引起该事件触发的源头:target)】
2、事件处理程序【处理相应事件的函数】
3、事件对象【触发事件产生的携带事件信息的对象】
二、事件流【从页面中接受事件的顺序】
1、事件捕获流    相同事件从外到内依次执行
2、事件冒泡流    相同事件从内到外依次执行
3、DOM事件流    先事件捕获,再处理目标,再冒泡
三、事件处理程序
1.HTML事件处理程序【HTML特性来指定】
eg:
<div onclick="test()"></div>
<script type="text/javascript">
function test(){};
</script>
缺点:
1)时差问题:可能在加载页面是无意间就触发相应的事件处理程序。
2)兼容性问题:存在浏览器兼容性问题。
3)代码划分问题:HTML与JavaScript代码紧密耦合。
    
2.DOM0级的事件处理程序【相应元素指定,this指向事件绑定元素】(特点是简单,跨浏览器。)
eg:
    var div = document.getElementsByTagName("div")[0];
    div.onclick = function(){};
    div.onclick = null;        //事件解除绑定    
说明:
可以同一元素添加多个相同类型的事件,但后面的相同的事件会覆盖前面的事件【同一元素相同事件只会执行一次】
3.DOM2级事件处理程序
    function handle(){};    //事件处理函数
a、非ie8以下浏览器    【不要对事件使用 "on" 前缀    eg:请使用 "click" 代替 "onclick"】
addEventListener(事件名,事件处理函数,布尔值)    事件绑定
eg:
    div.addEventListener('click',handle,false);
removeEventListener(事件名,事件处理函数,布尔值)    事件解绑
eg:
    div.removeEventListener('click',handle,false);
函数说明:
布尔值:true在捕获阶段调用事件处理程序;false在冒泡阶段调用事件处理程序(默认为:false)
可以同一元素添加多个相同类型的事件,并且按照她们添加的的顺序依次触发执行
添加事件时如果使用匿名函数将无法删除
b、ie8及以下浏览器【事件名:要添加on在前面】
attachEvent(事件名,事件处理函数,布尔值)    事件绑定
eg:
    div.attachEvent('onclick',handle,false);
detachEvent(事件名,事件处理函数)    事件解绑
eg:
    div.detachEvent('onclick',handle,false);  
函数说明:
布尔值:true在捕获阶段调用事件处理程序;false在冒泡阶段调用事件处理程序(默认为:false)
如果同一节点同一事件绑定多个事件处理程序,逆序执行
四、事件对象【里面的属性均为只读】
1、DOM中的事件对象【event】
currentTarget    [Element]    事件处理程序当前正在处理事件的那个元素【绑定该事件处理程序的元素】
target    [Element]    事件真正目标【引发事件发生的源头】
preventDefault()    [Function]    取消事件的默认行为
stopPropagation()    [Function]    取消事件的进一步捕获或者冒泡
bubbles  [Boolean]    事件是否冒泡
cancelable    [Boolean]    是否可取消事件默认行为
说明:
a、在事件处理程序内部,对象this===currentTarget值,而target则只包含事件的实际目标。
b、如果直接将事件处理程序指定给了目标元素,this,currentTarget,target包含相同的值。
c、兼容DOM的浏览器默认会将event对象传入到事件处理函数中
2、ie(COM)中的事件对象【window.event】opera也是使用window.event
type  [String]        被触发的事件 的类型
srcEvent  [Element]        事件的目标 【类似target】
returnValue  [Boolean]        取消时间默认行为,值为false阻止【类似preventDefault()】
cancelBubble  [Boolean]        是否取消事件冒泡,值为true取消冒泡【类似stopPropagation()】
3、js中兼容性处理问题
对相关兼容性问题封装为对象的相关方法
eg:
//事件兼容性对象eventUtil
var eventUtil = {
// 1.事件的绑定
bind:function(el,type,handle){
if (el.addEventListener) {
//非ie8及以下浏览器
el.addEventListener(type,handle);
}else if(el.attachEvent){
//ie8及以下浏览器
el.attachEvent('on'+type,handle);
}else{
el.['on'+type] = handle;
}
},
// 2.事件的解绑
unbind:function(el,type,handle){
if (el.removeEventListener) {
//非ie8及以下浏览器
el.removeEventListener(type,handle);
}else if(el.detachEvent){
//ie8及以下浏览器
el.detachEvent('on'+type,handle);
}else{
el.['on'+type] = null;
}
},
// 3.事件对象
getEvent:function(event){
//ie及opera使用window.event;其他基本使用event
return event?event:window.event;
},
// 4.事件目标
getTarget:function(event){
//ie使用srcElement;DOM中事件对象使用target
return event.target?event.target:event.srcElement;
},
// 5.事件冒泡
stopProp:function(event){
if(event.stopPropagation){
//DOM事件对象下使用
event.stopPropagation();
}else{
//ie下使用cancelBubble
event.cancelBubble = true;
}
},
// 6.事件默认
preventDef:function(event){
if (event.preventDefault) {
event.preventDefault();
}else{
event.returnValue = false;
}
}
};
封装对象 Code
js事件(十二)的更多相关文章
- Node.js实战(十二)之Stream
		
Stream 是一个抽象接口,Node 中有很多对象实现了这个接口.例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出). Node.js,Str ...
 - Mysql-学习笔记(==》事件 十二)
		
事件 计划任务(定期定时执行) -- 查看当前mysql数据库是否开启时间功能,默认关闭SHOW VARIABLES LIKE 'event_scheduler'; -- event_schedule ...
 - JS事件(二)事件对象
		
html事件处理程序中,变量event中保存着事件对象 <button onclick="alert(ev.type)" id="btn">clic ...
 - js上 十二、函数初步-1
		
11-1.引入(认识函数)  引入: 说起函数,其实我们并不陌生,在初中数学中我们就接触过函数:例如我们所学的 y = 2X+1 ; 这是一个二元一次方程,也是我们数字中的函数:  当我们每次输入 ...
 - 【D3.V3.js系列教程】--(十二)坐标尺度
		
[D3.V3.js系列教程]--(十二)坐标尺度 1.多种类型的缩放尺度 Quantitative Scales Linear Scales Identity Scales Power Scales ...
 - {Python之线程}    一 背景知识     二 线程与进程的关系     三 线程的特点     四 线程的实际应用场景     五 内存中的线程     六 用户级线程和内核级线程(了解)     七 python与线程     八 Threading模块     九 锁     十 信号量     十一 事件Event     十二 条件Condition(了解)     十三 定时器
		
Python之线程 线程 本节目录 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Thr ...
 - js的事件机制二
		
js的事件机制二 1.给合适的HTML标签添加合适的事件 onchange-----select下拉框 onload-----body标签 单双击-----用户会进行点击动作的HTML元素 鼠标事件 ...
 - D3.js的v5版本入门教程(第十二章)—— D3.js中各种精美的图形
		
D3.js的v5版本入门教程(第十二章) D3中提供了各种制作常见图形的函数,在d3的v3版本中叫布局,通过d3.layout.xxx,来新建,但是到了v5,新建一个d3中基本的图形的方式变了(我也并 ...
 - js获取近十二个月
		
1.获取近十二个月 var dataArr = []; var data = new Date(); var year = data.getFullYear(); data.setMonth(data ...
 
随机推荐
- win10教育版永久激活密钥 win10教育版激活码 win10教育版产品密钥2018(第三种方法亲测可用!)
			
有没有最新win10教育版激活密钥?win10教育版功能比较全面,增加了一些学术上需要的功能.有用户装了win10教育版,提示需要产品密钥,网上找到的win10教育版永久激活码大多失效,这边小编为大家 ...
 - Oracle数据库备份、灾备的23个常见问题
			
为了最大限度保障数据的安全性,同时能在不可预计灾难的情况下保证数据的快速恢复,需要根据数据的类型和重要程度制定相应的备份和恢复方案.在这个过程中,DBA的职责就是要保证数据库(其它数据由其它岗位负责) ...
 - mysql知识集锦
			
1.mysql中InnoDB引擎中页的概念 2.mysql索引详解--如何从磁盘中读取索引文件
 - SpringBoot 为API添加统一的异常处理(一)
			
首先我把异常分为两种,一种是可控制的,或者是由我们发现条件不正确主动抛出的异常,就像前城市编号不存在那个粟子:另一种是不可控制的,或者说是程序存在bug引起的异常,但这种异常也不想变态的就直接给前端抛 ...
 - zabbix使用自动发现功能批量监控服务器端口的可用性
			
使用自动发现脚本批量监控服务器端口的可用性 .编写自动发现脚本 # cat /usr/local/zabbix_agents_3.2.0/scripts/web_site_code_status.sh ...
 - 【C#】使用C# 读取Http的Post数据
			
private string Post(string num) { Encoding myEncoding = Encoding.GetEncoding("gb2312"); // ...
 - 使用java计算数组方差和标准差
			
使用java计算数组方差和标准差 觉得有用的话,欢迎一起讨论相互学习~Follow Me 首先给出方差和标准差的计算公式 代码 public class Cal_sta { double Sum(do ...
 - VC++ 学习笔记(六):简单C++
			
到现在,我觉得终于找到学习和使用C++的基本原则了——务必简单.将其看成一个带类的C,或者将其看做标准库下的C++. C++太复杂——其实这种复杂性,所有语言都有,只是多数语言都隐藏了这种复杂性,只有 ...
 - 无限用teamviewer的一种方法,虚拟机中装teamviewer
			
可以使用window 多用户可以同时远程登陆的特性(win服务器版自动支持多用户同时远程登陆,非服务器版需要其他方法开启) 1.在window建立两个用户,如a,b. 2安装虚拟机vmware,安装操 ...
 - 使用Android手机进行开发的尝试
			
使用Android手机查看和修改Excel文件.PowerPoint文件并连接幻灯机进行演示等办公方式想必大家已经有所了解.今天介绍一下怎样使用Android进行软件开发. Termux 使用Andr ...